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.net
de .
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[]