Write-SqlTableData
Schreibt Daten in eine Tabelle einer SQL-Datenbank.
Syntax
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>]
Beschreibung
Das Cmdlet Write-SqlTableData fügt Daten in eine Tabelle einer SQL-Datenbank ein. Dieses Cmdlet akzeptiert die folgenden Eingabetypen in den folgenden Ausgabeformaten:
- System.Data.DataSet
- System.data.datatable
- System.Data.DateRow-Objekte
- Auflistung von Objekten
Wenn Sie ein DataSet bereitstellen, wird nur die erste Tabelle im Dataset in die Datenbank geschrieben.
Sie können dieses Cmdlet mit dem Windows PowerShell SQL-Anbieter verwenden.
Dieses Cmdlet kann Informationen wie Server, Datenbank, Schema und Tabelle aus dem aktuellen Pfad ableiten.
Dieses Cmdlet erwartet, dass die Tabelle vorhanden ist. Standardmäßig fügt das Cmdlet Daten an diese Tabelle an.
Wenn Sie den Force-Parameter angeben, generiert das Cmdlet fehlende Objekte, zu denen die Datenbank, das Tabellenschema und die Tabelle selbst gehören. Diese Verwendung ermöglicht eine schnelle Übertragung von Daten in eine Datenbank. Das Cmdlet leitet das Schema der Tabelle aus den Daten ab. Das Ergebnis ist möglicherweise nicht optimal. Beispielsweise werden Zeichenfolgen NVARCHAR(MAX) zugeordnet.
Beispiele
Beispiel 1: Schreiben von Informationen zu Prozessen in eine Tabelle
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
In diesem Beispiel werden Informationen zu Prozessen abgerufen, die auf einem System ausgeführt werden, und in eine Tabelle geschrieben.
Das aktuelle Cmdlet schreibt die Daten in MyDatabase.dbo.TaskManagerDump
.MyServer\MyInstance
Da Sie den Force-Parameter angeben, werden sie von diesem Cmdlet erstellt, wenn die Datenbank, das Schema und die Tabelle nicht vorhanden sind.
Beispiel 2: Schreiben von Daten in eine Tabelle
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
Der erste Befehl ändert den Speicherort in einen Speicherort im SQLSERVER-Anbieter. Die Eingabeaufforderung gibt den neuen Speicherort an. Um weitere Informationen zu erfahren, geben Sie Get-Help about_Providers ein.
Der letzte Befehl zeigt den Inhalt der $Table
Variablen mithilfe des Cmdlets Read-SqlTableData an.
Beispiel 3: Importieren von Daten aus einer Datei in eine Tabelle
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
Dieses Beispiel wird vollständig über die Dateieingabeaufforderung ausgeführt. Kontextinformationen können nicht verwendet werden. Daher müssen Sie alle relevanten Parameter angeben.
Beachten Sie die Verwendung von "," vor der Zeile: Dadurch wird erzwungen, dass PowerShell den gesamten Inhalt der Datei direkt an das Write-SqlTableData-Cmdlet übergibt, das wiederum einen Masseneinfügungsvorgang durchführen kann (was viel performanter ist als ein Zeilen-für-Zeilen-Einfügen).
Beispiel 4: Abrufen von Daten aus einem instance und Pushen in die Tabelle einer Datenbank auf einer anderen instance
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
In diesem Beispiel werden Mithilfe des Cmdlets Invoke-SqlCmd Informationen zu den Größen von Datenbankdateien aus einem instance abgerufen und die resultierenden Zeilen in eine Datenbank auf einem anderen instance SQL Server eingefügt. Beachten Sie, dass in diesem Beispiel Daten zwar zwischen Instanzen von SQL Server auf demselben Computer verschoben werden, die Instanzen sich jedoch auf zwei völlig unterschiedlichen Servern befinden können.
Beispiel 5: Schreiben von Daten in eine vorhandene Tabelle einer Azure SQL-Datenbank (oder einer beliebigen Datenbank mit SQL-Authentifizierung)
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
In diesem Beispiel wird gezeigt, wie Sie das Cmdlet Write-SqlTableData mit der SQL-Authentifizierung verwenden.
Der meiste Code ist nur ADO.Net und SMO-Baustein erforderlich, um das erforderliche Objekt (das Objekt, das SMO Table
die Zieltabelle darstellt) zu erstellen, das über den -InputOject
Parameter an das Cmdlet übergeben wird.
Parameter
-AccessToken
Das Zugriffstoken, das zur Authentifizierung bei SQL Server verwendet wird, als Alternative zur Benutzer-/Kennwort- oder Windows-Authentifizierung.
Dies kann z. B. verwendet werden, um eine Verbindung mit SQL Azure DB
und SQL Azure Managed Instance
mithilfe von oder Service Principal
herzustellen Managed Identity
.
Der zu verwendende Parameter kann entweder eine Zeichenfolge sein, die das Token darstellt, oder ein PSAccessToken
Objekt, das durch Ausführen Get-AzAccessToken -ResourceUrl https://database.windows.net
von zurückgegeben wird.
Dieser Parameter ist in v22 des Moduls neu.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ConnectionTimeout
Gibt die Anzahl von Sekunden an, die vor einem Timeoutfehler auf eine Serververbindung gewartet werden soll. Der Timeoutwert muss einer ganzen Zahl zwischen 0 und 65.534 entsprechen. Wenn 0 angegeben wird, verursachen Verbindungsversuche kein Timeout.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Gibt ein PSCredential-Objekt für die Verbindung mit SQL Server an. Verwenden Sie zum Abrufen eines Anmeldeinformationsobjekts das Cmdlet Get-Credential. Weitere Informationen erhalten Sie, indem Sie Get-Help Get-Credential eingeben.
Type: | PSCredential |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DatabaseName
Gibt den Namen der Datenbank an, die die Tabelle enthält.
Das Cmdlet unterstützt das Anführungszeichen des Werts. Sie müssen keine Sonderzeichen anführungs- oder escapezeichen setzen.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encrypt
Der Verschlüsselungstyp, der beim Herstellen einer Verbindung mit SQL Server verwendet werden soll.
Dieser Wert wird der Encrypt
-Eigenschaft SqlConnectionEncryptOption
des SqlConnection-Objekts des Microsoft.Data.SqlClient-Treibers zugeordnet.
In v22 des Moduls ist Optional
der Standardwert (aus Kompatibilität mit v21). In Version 23 und höher des Moduls lautet der Standardwert "Obligatorisch", was zu einer Breaking Change für vorhandene Skripts führen kann.
Dieser Parameter ist in v22 des Moduls neu.
Type: | String |
Accepted values: | Mandatory, Optional, Strict |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Force
Gibt an, dass dieses Cmdlet fehlende SQL Server-Objekte erstellt. Dazu gehören die Datenbank, das Schema und die Tabelle. Sie müssen über die entsprechenden Anmeldeinformationen verfügen, um diese Objekte erstellen zu können.
Wenn Sie diesen Parameter nicht für fehlende Objekte angeben, gibt das Cmdlet einen Fehler zurück.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HostNameInCertificate
Der Hostname, der beim Überprüfen des TLS/SSL-Zertifikats von SQL Server verwendet werden soll. Sie müssen diesen Parameter übergeben, wenn Ihr SQL Server instance für "Verschlüsselung erzwingen" aktiviert ist und Sie eine Verbindung mit einem instance mithilfe des Hostnamens/Kurznamens herstellen möchten. Wenn dieser Parameter ausgelassen wird, ist die Übergabe des vollqualifizierten Domänennamens (Fully Qualified Domain Name, FQDN) an -ServerInstance erforderlich, um eine Verbindung mit einem für die Verschlüsselung erzwingen aktivierten SQL Server instance herzustellen.
Dieser Parameter ist in v22 des Moduls neu.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IgnoreProviderContext
Gibt an, dass dieses Cmdlet nicht den aktuellen Kontext verwendet, um die Werte der Parameter ServerInstance, DatabaseName, SchemaName und TableName zu überschreiben. Wenn Sie diesen Parameter nicht angeben, ignoriert das Cmdlet die Werte dieser Parameter, wenn möglich, zugunsten des Kontexts, in dem Sie das Cmdlet ausführen.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputData
Gibt die Daten an, die in die Datenbank geschrieben werden sollen.
Typische Eingabedaten sind System.Data.DataTable. Sie können jedoch System.Data.DataSet - oder System.Data.DateRow*-Objekte angeben.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InputObject
Gibt ein Array von SMO-Objekten (SQL Server Management Objects) an, die die Tabelle darstellen, in die dieses Cmdlet schreibt.
Type: | Table[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Passthru
Gibt an, dass dieses Cmdlet ein SMO zurückgibt. Table-Objekt . Dieses Objekt stellt die Tabelle dar, die die hinzugefügten Daten enthält. Sie können nach dem Schreibvorgang mit der Tabelle arbeiten.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Gibt den vollständigen Pfad im Kontext des SQL-Anbieters der Tabelle an, in die dieses Cmdlet Daten schreibt.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SchemaName
Gibt den Namen des Schemas für die Tabelle an.
Wenn Sie dieses Cmdlet im Kontext einer Datenbank oder eines untergeordneten Elements einer Datenbank ausführen, ignoriert das Cmdlet diesen Parameterwert. Geben Sie den IgnoreProviderContext-Parameter für das Cmdlet an, um trotzdem den Wert des SchemaName-Parameters zu verwenden.
Das Cmdlet unterstützt das Anführungszeichen des Werts. Sie müssen keine Sonderzeichen anführungs- oder escapezeichen setzen.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ServerInstance
Gibt den Namen einer instance von SQL Server an.
Geben Sie für die Standard-instance den Computernamen an.
Verwenden Sie für benannte Instanzen das Format ComputerName\InstanceName
.
Wenn Sie dieses Cmdlet im Kontext einer Datenbank oder eines untergeordneten Elements einer Datenbank ausführen, ignoriert das Cmdlet diesen Parameterwert. Geben Sie den IgnoreProviderContext-Parameter für das Cmdlet an, um trotzdem den Wert des ServerInstance-Parameters zu verwenden.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-SuppressProviderContextWarning
Gibt an, dass dieses Cmdlet die Warnmeldung unterdrückt, die besagt, dass das Cmdlet den Anbieterkontext verwendet.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TableName
Gibt den Namen der Tabelle an, aus der dieses Cmdlet liest.
Wenn Sie dieses Cmdlet im Kontext einer Datenbank oder eines untergeordneten Elements einer Datenbank ausführen, ignoriert das Cmdlet diesen Parameterwert. Geben Sie den IgnoreProviderContext-Parameter für das Cmdlet an, um trotzdem den Wert des TableName-Parameters zu verwenden.
Das Cmdlet unterstützt das Anführungszeichen des Werts. Sie müssen keine Sonderzeichen anführungs- oder escapezeichen setzen.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Timeout
Gibt einen Timeoutwert in Sekunden für den Schreibvorgang an. Wenn Sie keinen Wert angeben, verwendet das Cmdlet einen Standardwert (in der Regel 30s). Um ein Timeout zu vermeiden, übergeben Sie 0. Das Timeout muss ein ganzzahliger Wert zwischen 0 und 65535 sein.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TrustServerCertificate
Gibt an, ob der Kanal verschlüsselt wird, während das Durchlaufen der Zertifikatkette zum Überprüfen der Vertrauensstellung umgangen wird.
In v22 des Moduls ist $true
der Standardwert (aus Kompatibilität mit v21). In Version 23 und höher des Moduls lautet der Standardwert "$false", was zu einer Breaking Change für vorhandene Skripts führen kann.
Dieser Parameter ist in v22 des Moduls neu.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
System.Management.Automation.PSObject
System.String[]
Microsoft.SqlServer.Management.Smo.Table[]