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