Write-SqlTableData
Scrive i dati in una tabella di un database SQL.
Sintassi
Write-SqlTableData
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[[-Path] <String[]>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Write-SqlTableData
[-DatabaseName <String>]
[-SchemaName <String>]
[-TableName <String>]
[-IgnoreProviderContext]
[-SuppressProviderContextWarning]
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[[-ServerInstance] <String[]>]
[-Credential <PSCredential>]
[-ConnectionTimeout <Int32>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Write-SqlTableData
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[-InputObject] <Table[]>
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Descrizione
Il cmdlet Write-SqlTableData inserisce dati in una tabella di un database SQL. Questo cmdlet accetta i tipi di input seguenti i formati di output seguenti:
- System.Data.DataSet
- System.data.datatable
- Oggetti System.Data.DateRow
- Raccolta di oggetti
Se si specifica un oggetto DataSet, nel database viene scritta solo la prima tabella del set di dati.
È possibile usare questo cmdlet con il provider SQL Windows PowerShell.
Questo cmdlet può dedurre informazioni, ad esempio server, database, schema e tabella dal percorso corrente.
Questo cmdlet prevede che la tabella esista. Per impostazione predefinita, il cmdlet aggiunge i dati a tale tabella.
Se si specifica il parametro Force, il cmdlet genera oggetti mancanti, che includono il database, lo schema della tabella e la tabella stessa. Questo utilizzo consente il trasferimento rapido dei dati in un database. Il cmdlet inferisce lo schema della tabella dai dati. Il risultato potrebbe non essere ottimale. Ad esempio, le stringhe vengono mappate a NVARCHAR(MAX).
Esempio
Esempio 1: Scrivere informazioni sui processi in una tabella
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
Questo esempio ottiene informazioni sui processi eseguiti in un sistema e lo scrive in una tabella.
Il cmdlet corrente scrive i dati in MyDatabase.dbo.TaskManagerDump
in MyServer\MyInstance
.
Poiché si specifica il parametro Force , se il database, lo schema e la tabella non esistono, questo cmdlet li crea.
Esempio 2: Scrivere dati in una tabella
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
Il primo comando modifica la posizione in modo che sia una posizione nel provider SQLSERVER. Il prompt dei comandi riflette la nuova posizione. Per altre informazioni, digitare Get-Help about_Providers.
Il comando finale visualizza il contenuto della $Table
variabile usando il cmdlet Read-SqlTableData .
Esempio 3: Importare dati da un file a una tabella
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
Questo esempio viene eseguito completamente dal prompt dei file. Non può usare le informazioni di contesto. È pertanto necessario specificare tutti i parametri pertinenti.
Si noti che l'uso di ","davanti alla riga: si tratta di forzare PowerShell a passare l'intero contenuto del file direttamente al cmdlet Write-SqlTableData , che a sua volta può eseguire un inserimento bulk (che è più efficiente di una riga in base all'inserimento di righe)
Esempio 4: Recuperare i dati da un'istanza e eseguire il push alla tabella di un database in un'altra istanza
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
Questo esempio ottiene informazioni sulle dimensioni dei file di database da un'istanza usando il cmdlet Invoke-SqlCmd e inserisce le righe risultanti in un database in un'istanza diversa di SQL Server. Si noti che, mentre questo esempio sposta i dati tra istanze di SQL Server nello stesso computer, le istanze potrebbero trovarsi in due server completamente diversi.
Esempio 5: Scrivere dati in una tabella esistente di un database Azure SQL (o qualsiasi database usando l'autenticazione SQL)
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
Questo esempio illustra come usare il cmdlet Write-SqlTableData con l'autenticazione SQL.
La maggior parte del codice è solo ADO.Net e SMO boilerplate necessario per creare l'oggetto necessario (l'oggetto SMO Table
che rappresenta la tabella di destinazione) necessario che viene passato al cmdlet tramite il -InputOject
parametro .
Parametri
-AccessToken
Token di accesso usato per eseguire l'autenticazione per SQL Server, come alternativa all'autenticazione utente/password o a Windows.
Questa operazione può essere usata, ad esempio, per connettersi a SQL Azure DB
e SQL Azure Managed Instance
usando un Service Principal
oggetto o .Managed Identity
Il parametro da usare può essere una stringa che rappresenta il token o un PSAccessToken
oggetto restituito eseguendo Get-AzAccessToken -ResourceUrl https://database.windows.net
.
Questo parametro è nuovo nella versione 22 del modulo.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ConnectionTimeout
Specifica il numero di secondi per attendere una connessione server prima di un errore di timeout. Il valore di timeout deve essere un numero intero compreso tra 0 e 65534. Se si specifica 0, non si verifica alcun timeout dei tentativi di connessione.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Specifica un oggetto PSCredential per la connessione a SQL Server. Per ottenere un oggetto credenziale, usare il cmdlet Get-Credential. Per altre informazioni, digitare Get-Help Get-Credential.
Type: | PSCredential |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DatabaseName
Specifica il nome del database contenente la tabella.
Il cmdlet supporta la citazione del valore. Non è necessario virgolette o caratteri speciali di escape.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encrypt
Tipo di crittografia da usare durante la connessione a SQL Server.
Questo valore esegue il Encrypt
mapping alla proprietà SqlConnectionEncryptOption
nell'oggetto SqlConnection del driver Microsoft.Data.SqlClient.
Nella versione 22 del modulo il valore predefinito è Optional
(per la compatibilità con v21). Nella versione 23+ del modulo il valore predefinito sarà "Obbligatorio", che può creare una modifica di rilievo per gli script esistenti.
Questo parametro è nuovo nella versione 22 del modulo.
Type: | String |
Accepted values: | Mandatory, Optional, Strict |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Force
Indica che questo cmdlet crea oggetti SQL Server mancanti. Includono il database, lo schema e la tabella. È necessario disporre delle credenziali appropriate per creare questi oggetti.
Se non si specifica questo parametro per gli oggetti mancanti, il cmdlet restituisce un errore.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HostNameInCertificate
Nome host da usare per la convalida del certificato TLS/SSL di SQL Server. È necessario passare questo parametro se l'istanza di SQL Server è abilitata per Force Encryption e si vuole connettersi a un'istanza usando nome host/nome breve. Se questo parametro viene omesso, è necessario passare il nome di dominio completo (FQDN) a -ServerInstance per connettersi a un'istanza di SQL Server abilitata per Force Encryption.
Questo parametro è nuovo nella versione 22 del modulo.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IgnoreProviderContext
Indica che questo cmdlet non usa il contesto corrente per eseguire l'override dei valori dei parametri ServerInstance, DatabaseName, SchemaName e TableName. Se non si specifica questo parametro, il cmdlet ignora i valori di questi parametri, se possibile, a favore del contesto in cui si esegue il cmdlet.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputData
Specifica i dati da scrivere nel database.
I dati di input tipici sono un oggetto System.Data.DataTable, ma è possibile specificare oggetti System.Data.DataSet o System.Data.DateRow*.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InputObject
Specifica una matrice di oggetti SMO (Management Objects) SQL Server che rappresentano la tabella a cui scrive questo cmdlet.
Type: | Table[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Passthru
Indica che questo cmdlet restituisce un SMO. Oggetto Table . Questo oggetto rappresenta la tabella che include i dati aggiunti. È possibile operare sulla tabella dopo l'operazione di scrittura.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Specifica il percorso completo nel contesto del provider SQL della tabella in cui questo cmdlet scrive i dati.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SchemaName
Specifica il nome dello schema per la tabella.
Se si esegue questo cmdlet nel contesto di un database o di un elemento figlio di un database, il cmdlet ignora questo valore di parametro. Specificare il parametro IgnoreProviderContext per il cmdlet per usare comunque il valore del parametro SchemaName .
Il cmdlet supporta la citazione del valore. Non è necessario virgolette o caratteri speciali di escape.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ServerInstance
Specifica il nome di un'istanza di SQL Server.
Per l'istanza predefinita, specificare il nome del computer.
Per le istanze denominate, usare il formato ComputerName\InstanceName
.
Se si esegue questo cmdlet nel contesto di un database o di un elemento figlio di un database, il cmdlet ignora questo valore di parametro. Specificare il parametro IgnoreProviderContext per il cmdlet per usare comunque il valore del parametro ServerInstance .
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-SuppressProviderContextWarning
Indica che questo cmdlet elimina il messaggio di avviso che indica che il cmdlet usa il contesto del provider.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TableName
Specifica il nome della tabella da cui viene letto questo cmdlet.
Se si esegue questo cmdlet nel contesto di un database o di un elemento figlio di un database, il cmdlet ignora questo valore di parametro. Specificare il parametro IgnoreProviderContext per il cmdlet per usare comunque il valore del parametro TableName .
Il cmdlet supporta la citazione del valore. Non è necessario virgolette o caratteri speciali di escape.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Timeout
Specifica un valore di timeout, in secondi, per l'operazione di scrittura. Se non si specifica un valore, il cmdlet usa un valore predefinito (in genere, 30). Per evitare un timeout, passare 0. Il timeout deve essere un valore intero compreso tra 0 e 65535.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TrustServerCertificate
Indica se il canale verrà crittografato durante il bypass della catena di certificati per convalidare l'attendibilità.
Nella versione 22 del modulo il valore predefinito è $true
(per la compatibilità con v21). Nella versione 23+ del modulo il valore predefinito sarà "$false", che può creare una modifica di rilievo per gli script esistenti.
Questo parametro è nuovo nella versione 22 del modulo.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
System.Management.Automation.PSObject
System.String[]
Microsoft.SqlServer.Management.Smo.Table[]