Write-SqlTableData
Grava dados em uma tabela de um banco de dados SQL.
Sintaxe
Write-SqlTableData
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[[-Path] <String[]>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
Write-SqlTableData
[-DatabaseName <String>]
[-SchemaName <String>]
[-TableName <String>]
[-IgnoreProviderContext]
[-SuppressProviderContextWarning]
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[-ConnectToDatabase]
[[-ServerInstance] <String[]>]
[-Credential <PSCredential>]
[-ConnectionTimeout <Int32>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<CommonParameters>]
Write-SqlTableData
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[-InputObject] <Table[]>
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[-ProgressAction <ActionPreference>]
[<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 do conjunto de dados será gravada no banco de dados.
Você pode usar esse cmdlet com o provedor de SQL do 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 que são executados em um sistema e o grava em uma tabela.
O cmdlet atual grava os dados para MyDatabase.dbo.TaskManagerDump
no 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 variável
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 a partir do 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
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 do SQL Server. Observe que, embora este exemplo mova dados entre instâncias do 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 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 clichê de SMO necessários para criar o objeto necessário (o objeto SMO Table
que representa a tabela de destino) necessário que é passado para o cmdlet por meio do parâmetro -InputOject
.
Exemplo 6: gravar (e ler) dados em uma tabela existente de um Banco de Dados SQL do Azure usando a identidade gerenciada de uma VM do Azure.
Import-Module Az.Accounts,SQLServer
# Change these 3 variables to match your configuration.
# The example assumes you have a SQL Azure DB with the AdventureWorksLT sample DB on server sql-240627023957.
$Server = 'sql-240627023957.database.windows.net'
$Database = 'AdventureWorksLT'
# Connect to Azure using the system managed identify of the Azure VM this script is running on...
Add-AzAccount -Identity
# ... and fetch an access token to get to the DB.
$AccessToken = (Get-AzAccessToken -ResourceUrl 'https://database.windows.net').Token
# The assumption here is that the Microsoft Entra Admin on the server granted access
# to the managed identity of the VM by running something like:
# CREATE USER [<Name of the VM>] FROM EXTERNAL PROVIDER
# ALTER ROLE db_owner ADD MEMBER [<Name of the VM>]
# on the database ($Database).
# Insert a new record into the SalesLT.ProductDescription table
# Note that we are using -ConnectToDatabase to connect directly to the database, since it is unlikely for the
# managed identity of the VM to have access to anything but such database.
Write-SqlTableData -ServerInstance $Server -Database $Database -AccessToken $AccessToken -SchemaName SalesLT -TableName ProductDescription -InputData @{ Description = 'Hello SQLServer' } -ConnectToDatabase
# Confirm that the new record was successfully added
# Note that -ConnectToDatabase it not necessary in this case, as the connection if done directly to the database.
Read-SqlTableData -ServerInstance $Server -Database $Database -AccessToken $AccessToken -SchemaName SalesLT -TableName ProductDescription -OrderBy ModifiedDate -TopN 1 -ColumnOrderType DESC
# Output:
#
# ProductDescriptionID Description rowguid ModifiedDate
# -------------------- ----------- ------- ------------
# 2011 Hello SQLServer f5f43821-aacd-4748-9d14-4a525c6a036b 6/30/2024 10:19:26 AM
#
Parâmetros
-AccessToken
O token de acesso usado para autenticar no SQL Server, como uma alternativa ao usuário/senha ou à Autenticação do Windows.
Isso pode ser usado, por exemplo, para se conectar a SQL Azure DB
e SQL Azure Managed Instance
usando 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 objeto PSAccessToken
conforme retornado executando Get-AzAccessToken -ResourceUrl https://database.windows.net
.
Esse parâmetro é novo na v22 do módulo.
Tipo: | PSObject |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ConnectionTimeout
Especifica o número de segundos para aguardar uma conexão de servidor antes de uma falha de tempo limite. O valor de tempo limite deve ser um inteiro entre 0 e 65534. Se 0 for especificado, as tentativas de conexão não chegarão ao tempo limite.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ConnectToDatabase
Ao estabelecer a conexão, force o cmdlet a usar o banco de dados passado (-DatabaseName
) como o catálogo inicial.
Esse parâmetro pode ser útil para permitir que usuários com baixos privilégios se conectem a um banco de dados existente para a operação de gravação.
Não usar quando o banco de dados precisar ser criado.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Credential
Especifica um objeto PSCredential para a conexão com o SQL Server. Para obter um objeto de credencial, use o cmdlet Get-Credential. Para obter mais informações, digite Get-Help Get-Credential.
Tipo: | PSCredential |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 ou escapar de caracteres especiais.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Encrypt
O tipo de criptografia a ser usado ao se conectar ao SQL Server.
Esse valor é mapeado para a propriedade Encrypt
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 significativa para scripts existentes.
Esse parâmetro é novo na v22 do módulo.
Tipo: | String |
Valores aceitos: | Mandatory, Optional, Strict |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Force
Indica que esse cmdlet cria objetos do 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.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 a instância do 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 do SQL Server habilitada para o Force Encryption.
Esse parâmetro é novo na v22 do módulo.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-IgnoreProviderContext
Indica que esse cmdlet não usa o contexto atual para substituir os valores dos parâmetros ServerInstance, DatabaseName, SchemaNamee 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.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-InputData
Especifica os dados a serem gravados no banco de dados.
Os dados de entrada típicos são umSystem.Data.DataTable
Tipo: | PSObject |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-InputObject
Especifica uma matriz de objetos SMO (SQL Server Management Objects) que representam a tabela à qual esse cmdlet grava.
Tipo: | Table[] |
Cargo: | 1 |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-Passthru
Indica que esse cmdlet retorna um SMO . Objeto de tabela. Esse objeto representa a tabela que inclui os dados adicionados. Você pode operar na tabela após a operação de gravação.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-Path
Especifica o caminho completo no contexto do Provedor de SQL da tabela em que esse cmdlet grava dados.
Tipo: | String[] |
Cargo: | 1 |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ProgressAction
Determina como o PowerShell responde às atualizações de progresso geradas por um script, cmdlet ou provedor, como as barras de progresso geradas pelo cmdlet Write-Progress. O cmdlet Write-Progress cria barras de progresso que mostram o status de um comando.
Tipo: | ActionPreference |
Aliases: | proga |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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
O cmdlet dá suporte à citação do valor. Você não precisa citar ou escapar de caracteres especiais.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
-ServerInstance
Especifica o nome de uma instância do 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
Tipo: | String[] |
Cargo: | 1 |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
-SuppressProviderContextWarning
Indica que esse cmdlet suprime a mensagem de aviso que afirma que o cmdlet usa o contexto do provedor.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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
O cmdlet dá suporte à citação do valor. Você não precisa citar ou escapar de caracteres especiais.
Tipo: | String |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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.
Tipo: | Int32 |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | 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 significativa para scripts existentes.
Esse parâmetro é novo na v22 do módulo.
Tipo: | SwitchParameter |
Cargo: | Named |
Valor padrão: | None |
Obrigatório: | False |
Aceitar a entrada de pipeline: | False |
Aceitar caracteres curinga: | False |
Entradas
System.Management.Automation.PSObject
System.String[]
Microsoft.SqlServer.Management.Smo.Table[]