Write-SqlTableData

Écrit des données dans une table d’une base de données SQL.

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

Description

L’applet de commande Write-SqlTableData insère des données dans une table d’une base de données SQL. Cette applet de commande accepte les types d’entrée suivants aux formats de sortie suivants :

  • System.Data.DataSet
  • System.Data.DataTable
  • Objets System.Data.DateRow
  • Collection d’objets

Si vous fournissez un DataSet, seule la première table du jeu de données est écrite dans la base de données.

Vous pouvez utiliser cette applet de commande avec le fournisseur SQL Windows PowerShell.

Cette applet de commande peut déduire des informations telles que le serveur, la base de données, le schéma et la table à partir de son chemin actuel.

Cette applet de commande s’attend à ce que la table existe. Par défaut, l’applet de commande ajoute des données à cette table.

Si vous spécifiez le paramètre Force, l’applet de commande génère des objets manquants, qui incluent la base de données, le schéma de table et la table elle-même. Cette utilisation permet un transfert rapide de données vers une base de données. L’applet de commande déduit le schéma de la table à partir des données. Le résultat peut ne pas être optimal. Par exemple, les chaînes sont mappées à NVARCHAR(MAX).

Exemples

Exemple 1 : Écrire des informations sur les processus dans une table

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

Cet exemple obtient des informations sur les processus qui s’exécutent sur un système et les écrit dans une table.

L’applet de commande actuelle écrit les données MyDatabase.dbo.TaskManagerDump dans sur MyServer\MyInstance. Étant donné que vous spécifiez le paramètre Force , si la base de données, le schéma et la table n’existent pas, cette applet de commande les crée.

Exemple 2 : Écrire des données dans une table

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

La première commande modifie l’emplacement pour qu’il soit un emplacement dans le fournisseur SQLSERVER. L’invite de commandes reflète le nouvel emplacement. Pour plus d’informations, tapez Get-Help about_Providers.

La commande finale affiche le contenu de la variable à l’aide $Table de l’applet de commande Read-SqlTableData .

Exemple 3 : Importer des données d’un fichier dans une table

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

Cet exemple s’exécute complètement à partir de l’invite de fichiers. Il ne peut pas utiliser les informations de contexte. Par conséquent, vous devez spécifier tous les paramètres pertinents.

Notez l’utilisation de « , » devant la ligne : il s’agit de forcer PowerShell à passer l’intégralité du contenu du fichier directement à l’applet de commande Write-SqlTableData , qui à son tour peut effectuer une insertion en bloc (ce qui est beaucoup plus performant qu’une insertion ligne par ligne).

Exemple 4 : Récupérer des données d’un instance et envoyer (push) à la table d’une base de données sur un autre 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

Cet exemple obtient des informations sur la taille des fichiers de base de données d’une instance à l’aide de l’applet de commande Invoke-SqlCmd et insère les lignes résultantes dans une base de données sur une autre instance de SQL Server. Notez que bien que cet exemple déplace des données entre des instances de SQL Server sur le même ordinateur, les instances peuvent se trouver sur deux serveurs complètement différents.

Exemple 5 : écrire des données dans une table existante d’une base de données Azure SQL (ou toute base de données utilisant l’authentification 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

Cet exemple montre comment utiliser l’applet de commande Write-SqlTableData avec l’authentification SQL. La majeure partie du code est simplement ADO.Net et SMO réutilisable nécessaire pour créer l’objet nécessaire (l’objet SMO Table qui représente la table cible) nécessaire, qui est passé à l’applet de commande via le -InputOject paramètre .

Paramètres

-AccessToken

Jeton d’accès utilisé pour s’authentifier auprès de SQL Server, comme alternative à l’authentification utilisateur/mot de passe ou Windows.

Cela peut être utilisé, par exemple, pour se connecter à et à SQL Azure DB l’aide d’un Service Principal ou d’un Managed Identity.SQL Azure Managed Instance

Le paramètre à utiliser peut être une chaîne représentant le jeton ou un PSAccessToken objet tel que retourné par l’exécution Get-AzAccessToken -ResourceUrl https://database.windows.netde .

Ce paramètre est nouveau dans la version 22 du module.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionTimeout

Spécifie le nombre de secondes d’attente d’une connexion au serveur avant un échec de délai d’attente. La valeur du délai d'attente doit être un entier compris entre 0 et 65534. Si la valeur 0 est spécifiée, les tentatives de connexion n'expirent pas.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

Spécifie un objet PSCredential pour la connexion à SQL Server. Pour obtenir un objet d’informations d’identification, utilisez l’applet de commande Get-Credential. Pour plus d'informations, tapez Get-Help Get-Credential.

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DatabaseName

Spécifie le nom de la base de données qui contient la table.

L’applet de commande prend en charge la citation de la valeur. Vous n’avez pas besoin de citer ou d’échapper des caractères spéciaux.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encrypt

Type de chiffrement à utiliser lors de la connexion à SQL Server.

Cette valeur est mappée à la Encrypt propriété SqlConnectionEncryptOption sur l’objet SqlConnection du pilote Microsoft.Data.SqlClient.

Dans la version 22 du module, la valeur par défaut est Optional (pour la compatibilité avec v21). Dans la version 23+ du module, la valeur par défaut est « Obligatoire », ce qui peut créer une modification cassant pour les scripts existants.

Ce paramètre est nouveau dans la version 22 du module.

Type:String
Accepted values:Mandatory, Optional, Strict
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

Indique que cette applet de commande crée des objets SQL Server manquants. Il s’agit notamment de la base de données, du schéma et de la table. Vous devez disposer des informations d’identification appropriées pour créer ces objets.

Si vous ne spécifiez pas ce paramètre pour les objets manquants, l’applet de commande retourne une erreur.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostNameInCertificate

Nom d’hôte à utiliser pour valider le certificat SQL Server TLS/SSL. Vous devez passer ce paramètre si votre SQL Server instance est activé pour Forcer le chiffrement et que vous souhaitez vous connecter à un instance à l’aide de nom d’hôte/nom_court. Si ce paramètre est omis, le passage du nom de domaine complet (FQDN) à -ServerInstance est nécessaire pour se connecter à un SQL Server instance activé pour forcer le chiffrement.

Ce paramètre est nouveau dans la version 22 du module.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IgnoreProviderContext

Indique que cette applet de commande n’utilise pas le contexte actuel pour remplacer les valeurs des paramètres ServerInstance, DatabaseName, SchemaName et TableName . Si vous ne spécifiez pas ce paramètre, l’applet de commande ignore les valeurs de ces paramètres, si possible, au profit du contexte dans lequel vous exécutez l’applet de commande.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputData

Spécifie les données à écrire dans la base de données.

Les données d’entrée classiques sont un System.Data.DataTable, mais vous pouvez spécifier des objets System.Data.DataSet ou System.Data.DateRow*.

Type:PSObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InputObject

Spécifie un tableau d’objets SQL Server Management Objects (SMO) qui représentent la table dans laquelle cette applet de commande écrit.

Type:Table[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Passthru

Indique que cette applet de commande retourne un SMO. Objet Table . Cet objet représente la table qui inclut les données ajoutées. Vous pouvez opérer sur la table après l’opération d’écriture.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Spécifie le chemin d’accès complet dans le contexte du fournisseur SQL de la table où cette applet de commande écrit les données.

Type:String[]
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SchemaName

Spécifie le nom du schéma pour la table.

Si vous exécutez cette applet de commande dans le contexte d’une base de données ou d’un élément enfant d’une base de données, l’applet de commande ignore cette valeur de paramètre. Spécifiez le paramètre IgnoreProviderContext pour que l’applet de commande utilise quand même la valeur du paramètre SchemaName .

L’applet de commande prend en charge la citation de la valeur. Vous n’avez pas besoin de citer ou d’échapper des caractères spéciaux.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ServerInstance

Spécifie le nom d’une instance de SQL Server. Pour le instance par défaut, spécifiez le nom de l’ordinateur. Pour les instances nommées, utilisez le format ComputerName\InstanceName.

Si vous exécutez cette applet de commande dans le contexte d’une base de données ou d’un élément enfant d’une base de données, l’applet de commande ignore cette valeur de paramètre. Spécifiez le paramètre IgnoreProviderContext pour que l’applet de commande utilise quand même la valeur du paramètre ServerInstance .

Type:String[]
Position:1
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-SuppressProviderContextWarning

Indique que cette applet de commande supprime le message d’avertissement indiquant que l’applet de commande utilise le contexte du fournisseur.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TableName

Spécifie le nom de la table à partir de laquelle cette applet de commande lit.

Si vous exécutez cette applet de commande dans le contexte d’une base de données ou d’un élément enfant d’une base de données, l’applet de commande ignore cette valeur de paramètre. Spécifiez le paramètre IgnoreProviderContext pour que l’applet de commande utilise quand même la valeur du paramètre TableName .

L’applet de commande prend en charge la citation de la valeur. Vous n’avez pas besoin de citer ou d’échapper des caractères spéciaux.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Timeout

Spécifie une valeur de délai d’attente, en secondes, pour l’opération d’écriture. Si vous ne spécifiez pas de valeur, l’applet de commande utilise une valeur par défaut (généralement, 30s). Pour éviter un délai d’expiration, passez 0. Le délai d’expiration doit être une valeur entière comprise entre 0 et 65535.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TrustServerCertificate

Indique si le canal sera chiffré tout en contournant la chaîne de certificats pour valider l’approbation.

Dans la version 22 du module, la valeur par défaut est $true (pour la compatibilité avec v21). Dans v23+ du module, la valeur par défaut est « $false », ce qui peut créer une modification cassant pour les scripts existants.

Ce paramètre est nouveau dans la version 22 du module.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entrées

System.Management.Automation.PSObject

System.String[]

Microsoft.SqlServer.Management.Smo.Table[]