Write-SqlTableData

Escribe datos en una tabla de una base de datos 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

El cmdlet Write-SqlTableData inserta datos en una tabla de una base de datos SQL. Este cmdlet acepta los siguientes tipos de entrada los siguientes formatos de salida:

  • System.Data.DataSet
  • System.Data.DataTable
  • Objetos System.Data.DateRow
  • Colección de objetos

Si proporciona un DataSet, solo se escribe la primera tabla del conjunto de datos en la base de datos.

Puede usar este cmdlet con el proveedor de SQL Windows PowerShell.

Este cmdlet puede deducir información como el servidor, la base de datos, el esquema y la tabla de su ruta de acceso actual.

Este cmdlet espera que exista la tabla. De forma predeterminada, el cmdlet anexa datos a esa tabla.

Si especifica el parámetro Force, el cmdlet genera objetos que faltan, que incluyen la base de datos, el esquema de tabla y la propia tabla. Este uso permite la transferencia rápida de datos a una base de datos. El cmdlet deduce el esquema de la tabla a partir de los datos. Es posible que el resultado no sea óptimo. Por ejemplo, las cadenas se asignan a NVARCHAR(MAX).

Ejemplos

Ejemplo 1: Escribir información sobre los procesos en una tabla

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

En este ejemplo se obtiene información sobre los procesos que se ejecutan en un sistema y los escribe en una tabla.

El cmdlet actual escribe los datos MyDatabase.dbo.TaskManagerDump en en MyServer\MyInstance. Dado que especifica el parámetro Force , si la base de datos, el esquema y la tabla no existen, este cmdlet los crea.

Ejemplo 2: Escritura de datos en una tabla

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

El primer comando cambia la ubicación para que sea una ubicación en el proveedor SQLSERVER. El símbolo del sistema refleja la nueva ubicación. Para obtener más información, escriba Get-Help about_Providers.

El comando final muestra el contenido de la $Table variable mediante el cmdlet Read-SqlTableData .

Ejemplo 3: Importación de datos de un archivo a una tabla

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

En este ejemplo se ejecuta completamente desde el símbolo del sistema de archivos. No puede usar información de contexto. Por lo tanto, debe especificar todos los parámetros pertinentes.

Tenga en cuenta el uso de "," delante de la línea: esto obliga a PowerShell a pasar todo el contenido del archivo directamente al cmdlet Write-SqlTableData , que a su vez puede realizar una inserción masiva (que es mucho más eficaz que una fila por inserción de fila).

Ejemplo 4: Recuperación de datos de una instancia e inserción en la tabla de una base de datos en otra instancia

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

En este ejemplo se obtiene información sobre los tamaños de los archivos de base de datos de una instancia mediante el cmdlet Invoke-SqlCmd e inserta las filas resultantes en una base de datos en una instancia diferente de SQL Server. Tenga en cuenta que, aunque en este ejemplo se mueven datos entre instancias de SQL Server en el mismo equipo, las instancias podrían estar en dos servidores completamente diferentes.

Ejemplo 5: Escribir datos en una tabla existente de una base de datos de Azure SQL (o cualquier base de datos mediante la autenticación de 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

En este ejemplo se muestra cómo usar el cmdlet Write-SqlTableData con autenticación de SQL. La mayoría del código es simplemente ADO.Net y SMO reutilizable necesario para crear el objeto necesario (el SMO Table objeto que representa la tabla de destino) necesario que se pasa al cmdlet a través del -InputOject parámetro .

Parámetros

-AccessToken

Token de acceso que se usa para autenticarse en SQL Server, como alternativa a la autenticación de usuario o contraseña de Windows.

Esto se puede usar, por ejemplo, para conectarse a SQL Azure DB y SQL Azure Managed Instance usar o Service Principal .Managed Identity

El parámetro que se va a usar puede ser una cadena que representa el token o un PSAccessToken objeto tal como se devuelve mediante la ejecución Get-AzAccessToken -ResourceUrl https://database.windows.netde .

Este parámetro es nuevo en la versión 22 del módulo.

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

-ConnectionTimeout

Especifica el número de segundos que se esperarán a una conexión de servidor antes de que se agote el tiempo de espera. El valor del tiempo de espera debe ser un entero comprendido entre 0 y 65534. Si se especifica 0, los intentos de conexión no tienen tiempo de espera.

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

-Credential

Especifica un objeto PSCredential para la conexión a SQL Server. Para obtener un objeto de credencial, use el cmdlet Get-Credential. Para obtener más información, escriba Get-Help Get-Credential.

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

-DatabaseName

Especifica el nombre de la base de datos que contiene la tabla.

El cmdlet admite entrecomillar el valor. No es necesario comillas ni caracteres especiales de escape.

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

-Encrypt

Tipo de cifrado que se va a usar al conectarse a SQL Server.

Este valor se asigna a la Encrypt propiedad SqlConnectionEncryptOption del objeto SqlConnection del controlador Microsoft.Data.SqlClient.

En la versión 22 del módulo, el valor predeterminado es Optional (por compatibilidad con v21). En la versión 23+ del módulo, el valor predeterminado será "Obligatorio", lo que puede crear un cambio importante para los scripts existentes.

Este parámetro es nuevo en la versión 22 del módulo.

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

-Force

Indica que este cmdlet crea objetos SQL Server que faltan. Entre ellas se incluyen la base de datos, el esquema y la tabla. Debe tener las credenciales adecuadas para crear estos objetos.

Si no especifica este parámetro para los objetos que faltan, el cmdlet devuelve un error.

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

-HostNameInCertificate

Nombre de host que se va a usar al validar el certificado TLS/SSL de SQL Server. Debe pasar este parámetro si la instancia de SQL Server está habilitada para Forzar cifrado y desea conectarse a una instancia mediante el nombre de host o el nombre corto. Si se omite este parámetro, es necesario pasar el nombre de dominio completo (FQDN) a -ServerInstance para conectarse a una instancia de SQL Server habilitada para forzar el cifrado.

Este parámetro es nuevo en la versión 22 del módulo.

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

-IgnoreProviderContext

Indica que este cmdlet no usa el contexto actual para invalidar los valores de los parámetros ServerInstance, DatabaseName, SchemaName y TableName . Si no especifica este parámetro, el cmdlet omite los valores de estos parámetros, si es posible, en favor del contexto en el que se ejecuta el cmdlet.

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

-InputData

Especifica los datos que se van a escribir en la base de datos.

Los datos de entrada típicos son system.Data.DataTable, pero puede especificar objetos 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

Especifica una matriz de objetos de SQL Server Management Objects (SMO) que representan la tabla en la que escribe este cmdlet.

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

-Passthru

Indica que este cmdlet devuelve un SMO. Objeto Table . Este objeto representa la tabla que incluye los datos agregados. Puede trabajar en la tabla después de la operación de escritura.

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

-Path

Especifica la ruta de acceso completa en el contexto del proveedor SQL de la tabla donde este cmdlet escribe datos.

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

-SchemaName

Especifica el nombre del esquema de la tabla.

Si ejecuta este cmdlet en el contexto de una base de datos o un elemento secundario de una base de datos, el cmdlet omite este valor de parámetro. Especifique el parámetro IgnoreProviderContext para que el cmdlet use el valor del parámetro SchemaName de todos modos.

El cmdlet admite entrecomillar el valor. No es necesario comillas ni caracteres especiales de escape.

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

-ServerInstance

Especifica el nombre de una instancia de SQL Server. Para la instancia predeterminada, especifique el nombre del equipo. Para las instancias con nombre, use el formato ComputerName\InstanceName.

Si ejecuta este cmdlet en el contexto de una base de datos o un elemento secundario de una base de datos, el cmdlet omite este valor de parámetro. Especifique el parámetro IgnoreProviderContext para que el cmdlet use el valor del parámetro ServerInstance de todos modos.

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

-SuppressProviderContextWarning

Indica que este cmdlet suprime el mensaje de advertencia que indica que el cmdlet usa el contexto del proveedor.

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

-TableName

Especifica el nombre de la tabla de la que lee este cmdlet.

Si ejecuta este cmdlet en el contexto de una base de datos o un elemento secundario de una base de datos, el cmdlet omite este valor de parámetro. Especifique el parámetro IgnoreProviderContext para que el cmdlet use el valor del parámetro TableName de todos modos.

El cmdlet admite entrecomillar el valor. No es necesario comillas ni caracteres especiales de escape.

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

-Timeout

Especifica un valor de tiempo de espera, en segundos, para la operación de escritura. Si no especifica un valor, el cmdlet usa un valor predeterminado (normalmente, 30s). Para evitar un tiempo de espera, pase 0. El tiempo de espera debe ser un valor entero entre 0 y 65535.

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

-TrustServerCertificate

Indica si el canal se cifrará al pasar la cadena de certificados para validar la confianza.

En la versión 22 del módulo, el valor predeterminado es $true (por compatibilidad con v21). En la versión 23+ del módulo, el valor predeterminado será "$false", que puede crear un cambio importante para los scripts existentes.

Este parámetro es nuevo en la versión 22 del módulo.

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

Entradas

System.Management.Automation.PSObject

System.String[]

Microsoft.SqlServer.Management.Smo.Table[]