Write-SqlTableData
Menulis data ke tabel database SQL.
Sintaks
Write-SqlTableData
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[[-Path] <String[]>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
Write-SqlTableData
[-DatabaseName <String>]
[-SchemaName <String>]
[-TableName <String>]
[-IgnoreProviderContext]
[-SuppressProviderContextWarning]
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[-ConnectToDatabase]
[[-ServerInstance] <String[]>]
[-Credential <PSCredential>]
[-ConnectionTimeout <Int32>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
Write-SqlTableData
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[-InputObject] <Table[]>
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<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 menyediakanHimpunan Data
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 variabel
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
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
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 (objek SMO Table
yang mewakili tabel target) yang diperlukan yang diteruskan ke cmdlet melalui parameter -InputOject
.
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 PSAccessToken
seperti yang dikembalikan dengan menjalankan Get-AzAccessToken -ResourceUrl https://database.windows.net
.
Parameter ini baru dalam v22 modul.
Jenis: | PSObject |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | Int32 |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | PSCredential |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-DatabaseName
Menentukan nama database yang berisi tabel.
Cmdlet mendukung kutipan nilai. Anda tidak perlu mengutip atau menghindari karakter khusus.
Jenis: | String |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-Encrypt
Jenis enkripsi yang akan digunakan saat menyambungkan ke SQL Server.
Nilai ini memetakan ke properti Encrypt
SqlConnectionEncryptOption
pada objek SqlConnection 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.
Jenis: | String |
Nilai yang diterima: | Mandatory, Optional, Strict |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | String |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-IgnoreProviderContext
Menunjukkan bahwa cmdlet ini tidak menggunakan konteks saat ini untuk mengambil alih nilai
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-InputData
Menentukan data yang akan ditulis ke database.
Data input umum adalahSystem.Data.DataTable
Jenis: | PSObject |
Position: | Named |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-InputObject
Menentukan array objek SQL Server Management Objects (SMO) yang mewakili tabel yang ditulis cmdlet ini.
Jenis: | Table[] |
Position: | 1 |
Nilai default: | None |
Diperlukan: | True |
Terima input alur: | True |
Terima karakter wildcard: | False |
-Passthru
Menunjukkan bahwa cmdlet ini mengembalikan SMO . Tabel objek. Objek ini mewakili tabel yang menyertakan data yang ditambahkan. Anda dapat beroperasi pada tabel setelah operasi tulis.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-Path
Menentukan jalur lengkap dalam konteks Penyedia SQL tabel tempat cmdlet ini menulis data.
Jenis: | String[] |
Position: | 1 |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
-ProgressAction
Menentukan bagaimana PowerShell merespons pembaruan kemajuan yang dihasilkan oleh skrip, cmdlet, atau penyedia, seperti bilah kemajuan yang dihasilkan oleh cmdlet Write-Progress. cmdlet Write-Progress membuat bilah kemajuan yang memperlihatkan status perintah.
Jenis: | ActionPreference |
Alias: | proga |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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
Cmdlet mendukung kutipan nilai. Anda tidak perlu mengutip atau menghindari karakter khusus.
Jenis: | String |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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
Jenis: | String[] |
Position: | 1 |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | True |
Terima karakter wildcard: | False |
-SuppressProviderContextWarning
Menunjukkan bahwa cmdlet ini menekan pesan peringatan yang menyatakan bahwa cmdlet menggunakan konteks penyedia.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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
Cmdlet mendukung kutipan nilai. Anda tidak perlu mengutip atau menghindari karakter khusus.
Jenis: | String |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | Int32 |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | 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.
Jenis: | SwitchParameter |
Position: | Named |
Nilai default: | None |
Diperlukan: | False |
Terima input alur: | False |
Terima karakter wildcard: | False |
Input
System.Management.Automation.PSObject
System.String[]
Microsoft.SqlServer.Management.Smo.Table[]