Bagikan melalui


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 , 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 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 (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 EncryptSqlConnectionEncryptOption 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 ServerInstance, DatabaseName, parameterSchemaName, dan TableName. Jika Anda tidak menentukan parameter ini, cmdlet mengabaikan nilai parameter ini, jika memungkinkan, demi konteks di mana Anda menjalankan cmdlet.

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 , tetapi Anda dapat menentukan System.Data.DataSet atau system.Data.DateRow* objek.

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 IgnoreProviderContext untuk cmdlet untuk menggunakan nilai parameter SchemaName.

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 IgnoreProviderContext untuk cmdlet untuk menggunakan nilai parameter ServerInstance .

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 IgnoreProviderContext untuk cmdlet untuk menggunakan nilai parameter TableName.

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[]