Write-SqlTableData
Menulis data ke tabel database SQL.
Sintaks
ByPath (Default)
Write-SqlTableData
[[-Path] <String[]>]
-InputData <PSObject>
[-Force]
[-Passthru]
[-Timeout <Int32>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
ByName
Write-SqlTableData
[[-ServerInstance] <String[]>]
-InputData <PSObject>
[-DatabaseName <String>]
[-SchemaName <String>]
[-TableName <String>]
[-IgnoreProviderContext]
[-SuppressProviderContextWarning]
[-Force]
[-Passthru]
[-Timeout <Int32>]
[-ConnectToDatabase]
[-Credential <PSCredential>]
[-ConnectionTimeout <Int32>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
ByObject
Write-SqlTableData
[-InputObject] <Table[]>
-InputData <PSObject>
[-Force]
[-Passthru]
[-Timeout <Int32>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Deskripsi
Cmdlet Write-SqlTableData menyisipkan data ke dalam tabel database SQL. Cmdlet ini menerima jenis input berikut format output berikut:
- System.Data.DataSet
- System.Data.DataTable
- Objek System.Data.DateRow
- Kumpulan objek
Jika Anda menyediakan Himpunan Data, hanya tabel pertama dalam himpunan data yang ditulis ke database.
Anda dapat menggunakan cmdlet ini dengan penyedia Windows PowerShell SQL.
Cmdlet ini dapat menyimpulkan informasi seperti server, database, skema, dan tabel dari jalurnya saat ini.
Cmdlet ini mengharapkan tabel ada. Secara default, cmdlet menambahkan data ke tabel tersebut.
Jika Anda menentukan parameter Force, cmdlet menghasilkan objek yang hilang, yang mencakup database, skema tabel, dan tabel itu sendiri. Penggunaan ini memungkinkan transfer data cepat ke dalam database. Cmdlet menyimpulkan skema tabel dari data. Hasilnya mungkin tidak optimal. Misalnya, string dipetakan ke NVARCHAR(MAX).
Contoh
Contoh 1: Menulis informasi tentang proses ke tabel
PS C:\> (Get-Process | Select-Object -Property Id,ProcessName,StartTime,UserProcessorTime,WorkingSet,Description) |
Write-SqlTableData -ServerInstance "MyServer\MyInstance" -DatabaseName "MyDatabase" -SchemaName "dbo" -TableName "TaskManagerDump" -Force
Contoh ini mendapatkan informasi tentang proses yang berjalan pada sistem dan menulisnya ke tabel.
Cmdlet saat ini menulis data ke MyDatabase.dbo.TaskManagerDump pada MyServer\MyInstance.
Karena Anda menentukan parameter Force , jika database, skema, dan tabel tidak ada, cmdlet ini membuatnya.
Contoh 2: Menulis data ke tabel
PS C:\> cd SQLSERVER:\SQL\MyServer\MyInstance\Databases\MyDatabase\Tables
PS SQLSERVER:\SQL\MyServer\MyInstance\Databases\MyDatabase\Tables> $Table = Write-SqlTableData -TableName "KeyValuePairs" -SchemaName "dbo" -InputData @{ cca=10; cac='Hello'; aac=1.2 } -PassThru
PS SQLSERVER:\SQL\MyServer\MyInstance\Databases\MyDatabase\Tables> Read-SqlTableData -InputObject $Table
WARNING: Using provider context. Server = MyServer\MyInstance, Database = [MyDatabase].
Key Value
--- -----
aac 1.2
cac Hello
cca 10
Perintah pertama mengubah lokasi menjadi lokasi di penyedia SQLSERVER. Prompt perintah mencerminkan lokasi baru. Untuk informasi selengkapnya, ketik Get-Help about_Providers.
Perintah akhir menampilkan konten $Table variabel dengan menggunakan cmdlet Read-SqlTableData .
Contoh 3: Mengimpor data dari file ke tabel
PS C:\> ,(Import-Csv -Path ".\a.csv" -Header "Id","Name","Amount") | Write-SqlTableData -ServerInstance "MyServer\MyInstance" -DatabaseName "MyDatabase" -SchemaName "dbo" -TableName "CSVTable" -Force
PS C:\> Read-SqlTableData -ServerInstance "MyServer\MyInstance" -DatabaseName "MyDatabase" -SchemaName "dbo" -TableName "CSVTable"
Id Name Amount
-- ---- ------
10 AAAA -1.2
11 BBBB 1.2
12 CCCC -1.0
The first command imports the contents of a file by using the Import-Csv cmdlet. The file contains the following content:
10,AAAA,-1.2
11,BBBB,1.2
12,CCCC,-1.0
Contoh ini berjalan sepenuhnya dari prompt file. Ini tidak dapat menggunakan informasi konteks. Oleh karena itu, Anda harus menentukan semua parameter yang relevan.
Perhatikan penggunaan "," di depan baris: ini untuk memaksa PowerShell meneruskan seluruh konten file langsung ke cmdlet Write-SqlTableData , yang pada gilirannya dapat melakukan sisipan massal (yang jauh lebih berkinerja daripada sisipan baris demi baris)
Contoh 4: Mengambil data dari satu instans dan mendorong ke tabel database pada instans lain
PS C:\> (Invoke-Sqlcmd -query "SELECT @@SERVERNAME AS 'ServerName', DB_NAME(dbid) AS 'Database',
name, CONVERT(BIGINT, size) * 8 AS 'size_in_kb', filename
FROM master..sysaltfiles" `
-ServerInstance MyServer\MyInstance -database master -OutputAs DataTables) |
Write-SqlTableData -ServerInstance MyServer\MyOtherInstance -Database ServerStats -SchemaName dbo -TableName DatabasesSizes -Force
Contoh ini mendapatkan informasi tentang ukuran file database dari satu instans menggunakan cmdlet Invoke-SqlCmd , dan menyisipkan baris yang dihasilkan ke dalam database pada instans SQL Server yang berbeda. Perhatikan bahwa meskipun contoh ini memindahkan data antar instans SQL Server pada komputer yang sama, instans dapat berada di dua server yang sama sekali berbeda.
Contoh 5: Menulis data ke tabel Azure SQL Database yang sudah ada (atau database apa pun menggunakan SQL Auth)
Import-Module SqlServer
# Set your connection string to Azure SQL DB.
# If your server is not in Azure, just tweak the 'Data Source' field to point to your server.
# Warning: putting clear text passwords in your scripts is highly discoraged, so instead
# of using "User ID" and "Password" in the connection string, we prompt for the credentials.
$cred = Get-Credential -Message "Enter your SQL Auth credentials"
$cred.Password.MakeReadOnly()
# Get access to the SMO Server object.
$srv = Get-SqlInstance -ServerInstance "<your_server_name>.database.windows.net" -Credential $cred
# Get access to table 'MyTable1' on database 'MyDB'.
# Note: both objects are assumed to exists already.
$db = $srv.Databases["MyDB"]
$table = $db.Tables["MyTable1"]
# Write the first 4 integers into the table.
# Note: 'MyTable1' has a column 'Col1' of type 'int'
Write-SqlTableData -InputData (1..4) -InputObject $table
# Now, we read the data back to verify all went ok.
Read-SqlTableData -InputObject $table
# Output:
#
# Col1
# ----
# 1
# 2
# 3
# 4
Contoh ini memperlihatkan kepada Anda cara menggunakan cmdlet Write-SqlTableData dengan Autentikasi SQL.
Sebagian besar kode hanya ADO.Net dan boilerplate SMO yang diperlukan untuk membuat objek yang diperlukan ( SMO Table objek yang mewakili tabel target) yang diperlukan yang diteruskan ke cmdlet melalui -InputOject parameter .
Contoh 6: Tulis (dan baca) data ke tabel Azure SQL Database yang sudah ada menggunakan identitas terkelola Azure VM.
Import-Module Az.Accounts,SQLServer
# Change these 3 variables to match your configuration.
# The example assumes you have a SQL Azure DB with the AdventureWorksLT sample DB on server sql-240627023957.
$Server = 'sql-240627023957.database.windows.net'
$Database = 'AdventureWorksLT'
# Connect to Azure using the system managed identify of the Azure VM this script is running on...
Add-AzAccount -Identity
# ... and fetch an access token to get to the DB.
$AccessToken = (Get-AzAccessToken -ResourceUrl 'https://database.windows.net').Token
# The assumption here is that the Microsoft Entra Admin on the server granted access
# to the managed identity of the VM by running something like:
# CREATE USER [<Name of the VM>] FROM EXTERNAL PROVIDER
# ALTER ROLE db_owner ADD MEMBER [<Name of the VM>]
# on the database ($Database).
# Insert a new record into the SalesLT.ProductDescription table
# Note that we are using -ConnectToDatabase to connect directly to the database, since it is unlikely for the
# managed identity of the VM to have access to anything but such database.
Write-SqlTableData -ServerInstance $Server -Database $Database -AccessToken $AccessToken -SchemaName SalesLT -TableName ProductDescription -InputData @{ Description = 'Hello SQLServer' } -ConnectToDatabase
# Confirm that the new record was successfully added
# Note that -ConnectToDatabase it not necessary in this case, as the connection if done directly to the database.
Read-SqlTableData -ServerInstance $Server -Database $Database -AccessToken $AccessToken -SchemaName SalesLT -TableName ProductDescription -OrderBy ModifiedDate -TopN 1 -ColumnOrderType DESC
# Output:
#
# ProductDescriptionID Description rowguid ModifiedDate
# -------------------- ----------- ------- ------------
# 2011 Hello SQLServer f5f43821-aacd-4748-9d14-4a525c6a036b 6/30/2024 10:19:26 AM
#
Parameter
-AccessToken
Token akses yang digunakan untuk mengautentikasi ke SQL Server, sebagai alternatif untuk pengguna/kata sandi atau Autentikasi Windows.
Ini dapat digunakan, misalnya, untuk menyambungkan ke SQL Azure DB dan SQL Azure Managed Instance menggunakan Service Principal atau Managed Identity.
Parameter yang digunakan dapat berupa string yang mewakili token atau objek seperti yang PSAccessToken dikembalikan dengan menjalankan Get-AzAccessToken -ResourceUrl https://database.windows.net.
Parameter ini baru dalam v22 modul.
Properti parameter
| Jenis: | PSObject |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-ConnectionTimeout
Menentukan jumlah detik untuk menunggu koneksi server sebelum kegagalan waktu habis. Nilai waktu habis harus berupa bilangan bulat antara 0 dan 65534. Jika 0 ditentukan, upaya koneksi tidak kehabisan waktu.
Properti parameter
| Jenis: | Int32 |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-ConnectToDatabase
Saat membuat koneksi, paksa cmdlet untuk menggunakan database yang diteruskan (-DatabaseName) sebagai katalog awal.
Parameter ini mungkin berguna untuk memungkinkan pengguna dengan hak istimewa rendah tersambung ke database yang ada untuk operasi tulis.
Jangan gunakan saat database perlu dibuat.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Credential
Menentukan objek PSCredential untuk koneksi ke SQL Server. Untuk mendapatkan objek kredensial, gunakan cmdlet Get-Credential. Untuk informasi selengkapnya, ketik Get-Help Get-Credential.
Properti parameter
| Jenis: | PSCredential |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-DatabaseName
Menentukan nama database yang berisi tabel.
Cmdlet mendukung kutipan nilai. Anda tidak perlu mengutip atau menghindari karakter khusus.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Encrypt
Jenis enkripsi yang akan digunakan saat menyambungkan ke SQL Server.
Nilai ini memetakan ke Encrypt properti SqlConnectionEncryptOption pada objek SqlConnection dari driver Microsoft.Data.SqlClient.
Dalam v22 modul, defaultnya adalah Optional (untuk kompatibilitas dengan v21). Dalam v23+ modul, nilai defaultnya adalah 'Wajib', yang dapat membuat perubahan yang melanggar untuk skrip yang ada.
Parameter ini baru dalam v22 modul.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Nilai yang diterima: | Mandatory, Optional, Strict |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Force
Menunjukkan bahwa cmdlet ini membuat objek SQL Server yang hilang. Ini termasuk database, skema, dan tabel. Anda harus memiliki kredensial yang sesuai untuk membuat objek ini.
Jika Anda tidak menentukan parameter ini untuk objek yang hilang, cmdlet mengembalikan kesalahan.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-HostNameInCertificate
Nama host yang akan digunakan dalam memvalidasi sertifikat SQL Server TLS/SSL. Anda harus meneruskan parameter ini jika instans SQL Server Anda diaktifkan untuk Enkripsi Paksa dan Anda ingin terhubung ke instans menggunakan nama host/nama pendek. Jika parameter ini dihilangkan, maka meneruskan Nama Domain yang Sepenuhnya Memenuhi Syarat (FQDN) ke -ServerInstance diperlukan untuk terhubung ke instans SQL Server yang diaktifkan untuk Enkripsi Paksa.
Parameter ini baru dalam v22 modul.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-IgnoreProviderContext
Menunjukkan bahwa cmdlet ini tidak menggunakan konteks saat ini untuk mengambil alih nilai parameter ServerInstance, DatabaseName, SchemaName, dan TableName . Jika Anda tidak menentukan parameter ini, cmdlet mengabaikan nilai parameter ini, jika memungkinkan, demi konteks di mana Anda menjalankan cmdlet.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-InputData
Menentukan data yang akan ditulis ke database.
Data input umum adalah objek System.Data.DataTable, tetapi Anda dapat menentukan objek System.Data.DataSet atau System.Data.DateRow*.
Properti parameter
| Jenis: | PSObject |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | True |
| Nilai dari alur: | True |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-InputObject
Menentukan array objek SQL Server Management Objects (SMO) yang mewakili tabel yang ditulis cmdlet ini.
Properti parameter
| Jenis: | Table[] |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByObject
| Position: | 1 |
| Wajib: | True |
| Nilai dari alur: | True |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Passthru
Menunjukkan bahwa cmdlet ini mengembalikan SMO. Objek tabel . Objek ini mewakili tabel yang menyertakan data yang ditambahkan. Anda dapat beroperasi pada tabel setelah operasi tulis.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Path
Menentukan jalur lengkap dalam konteks Penyedia SQL tabel tempat cmdlet ini menulis data.
Properti parameter
| Jenis: | String[] |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByPath
| Position: | 1 |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-SchemaName
Menentukan nama skema untuk tabel.
Jika Anda menjalankan cmdlet ini dalam konteks database atau item turunan database, cmdlet mengabaikan nilai parameter ini. Tentukan parameter IgnoreProviderContext untuk cmdlet untuk tetap menggunakan nilai parameter SchemaName .
Cmdlet mendukung kutipan nilai. Anda tidak perlu mengutip atau menghindari karakter khusus.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-ServerInstance
Menentukan nama instans SQL Server.
Untuk instans default, tentukan nama komputer.
Untuk instans bernama, gunakan format ComputerName\InstanceName.
Jika Anda menjalankan cmdlet ini dalam konteks database atau item turunan database, cmdlet mengabaikan nilai parameter ini. Tentukan parameter IgnoreProviderContext untuk cmdlet untuk tetap menggunakan nilai parameter ServerInstance .
Properti parameter
| Jenis: | String[] |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | 1 |
| Wajib: | False |
| Nilai dari alur: | True |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-SuppressProviderContextWarning
Menunjukkan bahwa cmdlet ini menekan pesan peringatan yang menyatakan bahwa cmdlet menggunakan konteks penyedia.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-TableName
Menentukan nama tabel tempat cmdlet ini dibaca.
Jika Anda menjalankan cmdlet ini dalam konteks database atau item turunan database, cmdlet mengabaikan nilai parameter ini. Tentukan parameter IgnoreProviderContext untuk cmdlet untuk tetap menggunakan nilai parameter TableName .
Cmdlet mendukung kutipan nilai. Anda tidak perlu mengutip atau menghindari karakter khusus.
Properti parameter
| Jenis: | String |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
ByName
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-Timeout
Menentukan nilai waktu habis, dalam detik, untuk operasi tulis. Jika Anda tidak menentukan nilai, cmdlet menggunakan nilai default (biasanya, 30 detik). Untuk menghindari batas waktu, lewati 0. Batas waktu harus berupa nilai bilangan bulat antara 0 dan 65535.
Properti parameter
| Jenis: | Int32 |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
-TrustServerCertificate
Menunjukkan apakah saluran akan dienkripsi saat melewati rantai sertifikat untuk memvalidasi kepercayaan.
Dalam v22 modul, defaultnya adalah $true (untuk kompatibilitas dengan v21). Dalam v23+ modul, nilai defaultnya adalah '$false', yang dapat membuat perubahan yang melanggar untuk skrip yang ada.
Parameter ini baru dalam v22 modul.
Properti parameter
| Jenis: | SwitchParameter |
| Nilai default: | None |
| Mendukung wildcard: | False |
| DontShow: | False |
Set parameter
(All)
| Position: | Named |
| Wajib: | False |
| Nilai dari alur: | False |
| Nilai dari alur berdasarkan nama properti: | False |
| Nilai dari argumen yang tersisa: | False |
CommonParameters
Cmdlet ini mendukung parameter umum: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction, dan -WarningVariable. Untuk informasi selengkapnya, lihat about_CommonParameters.