Bagikan melalui


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.

Input

System.Management.Automation.PSObject

System.String

Microsoft.SqlServer.Management.Smo.Table