Write-SqlTableData
Grava dados em uma tabela de um banco de dados 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
O cmdlet Write-SqlTableData insere dados em uma tabela de um banco de dados SQL. Esse cmdlet aceita os seguintes tipos de entrada os seguintes formatos de saída:
- System.Data.DataSet
- System.Data.DataTable
- Objetos System.Data.DateRow
- Coleção de objetos
Se você fornecer um DataSet, somente a primeira tabela no conjunto de dados será gravada no banco de dados.
Você pode usar esse cmdlet com o provedor de SQL Windows PowerShell.
Esse cmdlet pode inferir informações como servidor, banco de dados, esquema e tabela de seu caminho atual.
Esse cmdlet espera que a tabela exista. Por padrão, o cmdlet acrescenta dados a essa tabela.
Se você especificar o parâmetro Force, o cmdlet gerará objetos ausentes, que incluem o banco de dados, o esquema de tabela e a própria tabela. Esse uso permite a transferência rápida de dados para um banco de dados. O cmdlet infere o esquema da tabela dos dados. O resultado pode não ser ideal. Por exemplo, as cadeias de caracteres são mapeadas para NVARCHAR(MAX).
Exemplos
Exemplo 1: gravar informações sobre processos em uma tabela
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
Este exemplo obtém informações sobre processos executados em um sistema e as grava em uma tabela.
O cmdlet atual grava os dados MyDatabase.dbo.TaskManagerDump
em em MyServer\MyInstance
.
Como você especifica o parâmetro Force , se o banco de dados, o esquema e a tabela não existirem, esse cmdlet os criará.
Exemplo 2: Gravar dados em uma tabela
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
O primeiro comando altera o local para ser um local no provedor SQLSERVER. O prompt de comando reflete o novo local. Para obter mais informações, digite Get-Help about_Providers.
O comando final exibe o conteúdo da $Table
variável usando o cmdlet Read-SqlTableData .
Exemplo 3: Importar dados de um arquivo para uma tabela
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
Este exemplo é executado completamente no prompt de arquivo. Ele não pode usar informações de contexto. Portanto, você deve especificar todos os parâmetros relevantes.
Observe o uso do "" na frente da linha: isso é para forçar o PowerShell a passar todo o conteúdo do arquivo diretamente para o cmdlet Write-SqlTableData , que, por sua vez, pode fazer uma inserção em massa (que é muito mais performante do que uma linha por inserção de linha)
Exemplo 4: recuperar dados de uma instância e enviar por push para a tabela de um banco de dados em outra instância
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
Este exemplo obtém informações sobre tamanhos de arquivos de banco de dados de uma instância usando o cmdlet Invoke-SqlCmd e insere as linhas resultantes em um banco de dados em uma instância diferente de SQL Server. Observe que, embora este exemplo mova dados entre instâncias de SQL Server no mesmo computador, as instâncias podem estar em dois servidores completamente diferentes.
Exemplo 5: gravar dados em uma tabela existente de um banco de dados SQL do Azure (ou qualquer banco de dados usando a autenticação 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
Este exemplo mostra como usar o cmdlet Write-SqlTableData com a Autenticação SQL.
A maior parte do código é apenas ADO.Net e o SMO clichê necessário para criar o objeto necessário (o SMO Table
objeto que representa a tabela de destino) necessário, que é passado para o cmdlet por meio do -InputOject
parâmetro .
Parâmetros
-AccessToken
O token de acesso usado para autenticar para SQL Server, como uma alternativa ao usuário/senha ou à Autenticação do Windows.
Isso pode ser usado, por exemplo, para se conectar SQL Azure DB
e SQL Azure Managed Instance
usar um Service Principal
ou um Managed Identity
.
O parâmetro a ser usado pode ser uma cadeia de caracteres que representa o token ou um PSAccessToken
objeto conforme retornado executando Get-AzAccessToken -ResourceUrl https://database.windows.net
.
Esse parâmetro é novo na v22 do módulo.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ConnectionTimeout
Especifica o número de segundos para aguardar uma conexão de servidor antes de uma falha no tempo limite. O valor do tempo limite deve ser um inteiro entre 0 e 65534. Se 0 for especificado, as tentativas de conexão não atingirão o tempo limite.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
Especifica um objeto PSCredential para a conexão com SQL Server. Para obter um objeto de credencial, use o cmdlet Get-Credential. Para obter mais informações, digite Get-Help Get-Credential.
Type: | PSCredential |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DatabaseName
Especifica o nome do banco de dados que contém a tabela.
O cmdlet dá suporte à citação do valor. Você não precisa citar nem escapar de caracteres especiais.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encrypt
O tipo de criptografia a ser usado ao se conectar a SQL Server.
Esse valor é mapeado para a Encrypt
propriedade SqlConnectionEncryptOption
no objeto SqlConnection do driver Microsoft.Data.SqlClient.
Na v22 do módulo, o padrão é Optional
(para compatibilidade com v21). Na v23+ do módulo, o valor padrão será 'Obrigatório', o que pode criar uma alteração interruptiva para scripts existentes.
Esse parâmetro é novo na v22 do 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 esse cmdlet cria objetos SQL Server ausentes. Isso inclui o banco de dados, o esquema e a tabela. Você deve ter as credenciais apropriadas para criar esses objetos.
Se você não especificar esse parâmetro para objetos ausentes, o cmdlet retornará um erro.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-HostNameInCertificate
O nome do host a ser usado na validação do certificado TLS/SSL do SQL Server. Você deve passar esse parâmetro se sua instância de SQL Server estiver habilitada para o Force Encryption e quiser se conectar a uma instância usando nome de host/nome curto. Se esse parâmetro for omitido, passar o FQDN (Nome de Domínio Totalmente Qualificado) para -ServerInstance será necessário para se conectar a uma instância de SQL Server habilitada para o Force Encryption.
Esse parâmetro é novo na v22 do módulo.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IgnoreProviderContext
Indica que esse cmdlet não usa o contexto atual para substituir os valores dos parâmetros ServerInstance, DatabaseName, SchemaName e TableName . Se você não especificar esse parâmetro, o cmdlet ignorará os valores desses parâmetros, se possível, em favor do contexto no qual você executa o cmdlet.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputData
Especifica os dados a serem gravados no banco de dados.
Os dados de entrada típicos são um System.Data.DataTable, mas você pode especificar objetos 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
Especifica uma matriz de objetos SMO (SQL Server Management Objects) que representam a tabela na qual esse cmdlet é gravado.
Type: | Table[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Passthru
Indica que esse cmdlet retorna um SMO. Objeto Table . Esse objeto representa a tabela que inclui os dados adicionados. Você pode operar na tabela após a operação de gravação.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Especifica o caminho completo no contexto do Provedor de SQL da tabela em que esse cmdlet grava dados.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SchemaName
Especifica o nome do esquema para a tabela.
Se você executar esse cmdlet no contexto de um banco de dados ou um item filho de um banco de dados, o cmdlet ignorará esse valor de parâmetro. Especifique o parâmetro IgnoreProviderContext para que o cmdlet use o valor do parâmetro SchemaName de qualquer maneira.
O cmdlet dá suporte à citação do valor. Você não precisa citar nem escapar de caracteres especiais.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ServerInstance
Especifica o nome de uma instância de SQL Server.
Para a instância padrão, especifique o nome do computador.
Para instâncias nomeadas, use o formato ComputerName\InstanceName
.
Se você executar esse cmdlet no contexto de um banco de dados ou um item filho de um banco de dados, o cmdlet ignorará esse valor de parâmetro. Especifique o parâmetro IgnoreProviderContext para o cmdlet usar o valor do parâmetro ServerInstance de qualquer maneira.
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-SuppressProviderContextWarning
Indica que esse cmdlet suprime a mensagem de aviso que afirma que o cmdlet usa o contexto do provedor.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TableName
Especifica o nome da tabela da qual este cmdlet lê.
Se você executar esse cmdlet no contexto de um banco de dados ou um item filho de um banco de dados, o cmdlet ignorará esse valor de parâmetro. Especifique o parâmetro IgnoreProviderContext para o cmdlet usar o valor do parâmetro TableName de qualquer maneira.
O cmdlet dá suporte à citação do valor. Você não precisa citar nem escapar de caracteres especiais.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Timeout
Especifica um valor de tempo limite, em segundos, para a operação de gravação. Se você não especificar um valor, o cmdlet usará um valor padrão (normalmente, 30s). Para evitar um tempo limite, passe 0. O tempo limite deve ser um valor inteiro entre 0 e 65535.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TrustServerCertificate
Indica se o canal será criptografado ao ignorar a cadeia de certificados para validar a confiança.
Na v22 do módulo, o padrão é $true
(para compatibilidade com v21). Na v23+ do módulo, o valor padrão será '$false', o que pode criar uma alteração interruptiva para scripts existentes.
Esse parâmetro é novo na v22 do 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[]