Partilhar via


Write-SqlTableData

Grava dados em uma tabela de um banco de dados SQL.

Sintaxe

ByPath (Padrão)

Write-SqlTableData
    [[-Path] <String[]>]
    -InputData <PSObject>
    [-Force]
    [-Passthru]
    [-Timeout <Int32>]
    [-AccessToken <PSObject>]
    [-TrustServerCertificate]
    [-HostNameInCertificate <String>]
    [-Encrypt <String>]
    [<CommonParameters>]

ByName

Write-SqlTableData
    [[-ServerInstance] <String[]>]
    -InputData <PSObject>
    [-DatabaseName <String>]
    [-SchemaName <String>]
    [-TableName <String>]
    [-IgnoreProviderContext]
    [-SuppressProviderContextWarning]
    [-Force]
    [-Passthru]
    [-Timeout <Int32>]
    [-ConnectToDatabase]
    [-Credential <PSCredential>]
    [-ConnectionTimeout <Int32>]
    [-AccessToken <PSObject>]
    [-TrustServerCertificate]
    [-HostNameInCertificate <String>]
    [-Encrypt <String>]
    [<CommonParameters>]

ByObject

Write-SqlTableData
    [-InputObject] <Table[]>
    -InputData <PSObject>
    [-Force]
    [-Passthru]
    [-Timeout <Int32>]
    [-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 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 MyDatabase.dbo.TaskManagerDump 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 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 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 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 SMO Table objeto que representa a tabela de destino) necessário que é passado para o cmdlet por meio do -InputOject parâmetro.

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

Propriedades do parâmetro

Tipo:PSObject
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:Int32
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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 use quando o banco de dados precisar ser criado.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:PSCredential
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Encrypt

O tipo de criptografia a ser usado ao se conectar ao 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 significativa para scripts existentes.

Esse parâmetro é novo na v22 do módulo.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Valores aceitos:Mandatory, Optional, Strict
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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*.

Propriedades do parâmetro

Tipo:PSObject
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:True
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-InputObject

Especifica uma matriz de objetos SMO (SQL Server Management Objects) que representam a tabela à qual esse cmdlet grava.

Propriedades do parâmetro

Tipo:

Table[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByObject
Cargo:1
Obrigatório:True
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-Path

Especifica o caminho completo no contexto do Provedor de SQL da tabela em que esse cmdlet grava dados.

Propriedades do parâmetro

Tipo:

String[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByPath
Cargo:1
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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 o cmdlet usar o valor do parâmetro SchemaName de qualquer maneira.

O cmdlet dá suporte à citação do valor. Você não precisa citar ou escapar de caracteres especiais.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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 para o cmdlet usar o valor do parâmetro ServerInstance de qualquer maneira.

Propriedades do parâmetro

Tipo:

String[]

Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:1
Obrigatório:False
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-SuppressProviderContextWarning

Indica que esse cmdlet suprime a mensagem de aviso que afirma que o cmdlet usa o contexto do provedor.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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 ou escapar de caracteres especiais.

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

ByName
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:Int32
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

CommonParameters

Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.

Entradas

System.Management.Automation.PSObject

System.String

Microsoft.SqlServer.Management.Smo.Table