Поделиться через


Write-SqlTableData

Записывает данные в таблицу базы данных SQL.

Синтаксис

ByPath (по умолчанию)

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

Описание

Командлет Write-SqlTableData вставляет данные в таблицу базы данных SQL. Этот командлет принимает следующие типы входных данных в следующих форматах выходных данных:

  • System.DataSet
  • System.Data.DataTable
  • Объекты System.Data.DateRow
  • Коллекция объектов

Если вы предоставляете набор данных, в базу данных записывается только первая таблица в наборе данных.

Этот командлет можно использовать с поставщиком SQL Windows PowerShell.

Этот командлет может выводить такие сведения, как сервер, база данных, схема и таблица из текущего пути.

Этот командлет ожидает, что таблица будет существовать. По умолчанию командлет добавляет данные в эту таблицу.

Если указать параметр Force, командлет создает отсутствующие объекты, которые включают базу данных, схему таблицы и саму таблицу. Это позволяет быстро передавать данные в базу данных. Командлет содержит схему таблицы из данных. Результат может быть неоптимальным. Например, строки сопоставляются с NVARCHAR(MAX).

Примеры

Пример 1. Запись сведений о процессах в таблицу

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

Этот пример получает сведения о процессах, выполняемых в системе, и записывает их в таблицу.

Текущий командлет записывает в нее данные MyDatabase.dbo.TaskManagerDumpMyServer\MyInstance. Так как вы указываете параметр Force , если база данных, схема и таблица не существуют, этот командлет создает их.

Пример 2. Запись данных в таблицу

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

Первая команда изменяет расположение, чтобы быть расположением в поставщике SQLSERVER. Командная строка отражает новое расположение. Дополнительные сведения см. в Get-Help about_Providers.

Последняя команда отображает содержимое переменной $Table с помощью командлета Read-SqlTableData .

Пример 3. Импорт данных из файла в таблицу

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

Этот пример выполняется полностью из запроса файла. Не удается использовать сведения о контексте. Поэтому необходимо указать все соответствующие параметры.

Обратите внимание на использование "," перед строкой. Это позволяет PowerShell передавать все содержимое файла непосредственно командлету Write-SqlTableData , который, в свою очередь, может выполнять массовую вставку (что является более производительной, чем вставка строк по строкам).

Пример 4. Получение данных из одного экземпляра и отправка в таблицу базы данных на другом экземпляре

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

Этот пример получает сведения о размерах файлов базы данных из одного экземпляра с помощью командлета Invoke-SqlCmd и вставляет полученные строки в базу данных в другом экземпляре SQL Server. Обратите внимание, что в этом примере данные перемещаются между экземплярами SQL Server на одном компьютере, экземпляры могут находиться на двух полностью разных серверах.

Пример 5. Запись данных в существующую таблицу базы данных SQL Azure (или любой базы данных с помощью проверки подлинности 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

В этом примере показано, как использовать командлет Write-SqlTableData с проверкой подлинности SQL. Большая часть кода — это просто ADO.Net и шаблон SMO, необходимый для создания необходимого объекта ( SMO Table объекта, представляющего целевую таблицу), который передается командлету через -InputOject параметр.

Пример 6. Запись (и чтение) данных в существующую таблицу базы данных SQL Azure с помощью управляемого удостоверения виртуальной машины 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
#

Параметры

-AccessToken

Маркер доступа, используемый для проверки подлинности в SQL Server, в качестве альтернативы пользователю или паролю или проверке подлинности Windows.

Это можно использовать, например, для подключения SQL Azure DB и использования объекта SQL Azure Managed Instance или aService PrincipalManaged Identity.

Используемый параметр может быть строкой, представляющей маркер или PSAccessToken объект, возвращаемый выполнением Get-AzAccessToken -ResourceUrl https://database.windows.net.

Этот параметр является новым в версии 22 модуля.

Свойства параметра

Тип:PSObject
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-ConnectionTimeout

Указывает количество секунд ожидания подключения к серверу до сбоя времени ожидания. Значение времени ожидания должно быть целым числом от 0 до 65534. Если задано значение 0, попытки подключения не истекает.

Свойства параметра

Тип:Int32
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-ConnectToDatabase

При установке подключения принудительная командлету использовать переданный в базе данных (-DatabaseName) в качестве начального каталога. Этот параметр может быть полезен, чтобы разрешить пользователям с низким уровнем привилегий подключаться к существующей базе данных для операции записи. Не используйте, когда необходимо создать базу данных.

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Credential

Указывает объект PSCredential для подключения к SQL Server. Чтобы получить объект учетных данных, используйте командлет Get-Credential. Для получения дополнительных сведений введите Get-Help Get-Credential.

Свойства параметра

Тип:PSCredential
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-DatabaseName

Указывает имя базы данных, содержащей таблицу.

Командлет поддерживает кворирование значения. Вам не нужно цитировать или экранировать специальные символы.

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Encrypt

Тип шифрования, используемый при подключении к SQL Server.

Это значение сопоставляется со Encrypt свойством SqlConnectionEncryptOption объекта SqlConnection драйвера Microsoft.Data.SqlClient.

В версии 22 модуля используется Optional значение по умолчанию (для совместимости с версией 21). В версии 23+ модуля значение по умолчанию будет "Обязательный", которое может создать критическое изменение для существующих скриптов.

Этот параметр является новым в версии 22 модуля.

Свойства параметра

Тип:String
Default value:None
Допустимые значения:Mandatory, Optional, Strict
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Force

Указывает, что этот командлет создает отсутствующие объекты SQL Server. К ним относятся база данных, схема и таблица. Для создания этих объектов необходимо иметь соответствующие учетные данные.

Если этот параметр не указан для отсутствующих объектов, командлет возвращает ошибку.

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-HostNameInCertificate

Имя узла используется для проверки TLS/SSL-сертификата SQL Server. Этот параметр необходимо передать, если экземпляр SQL Server включен для принудительного шифрования и требуется подключиться к экземпляру с помощью имени узла или короткого имени. Если этот параметр опущен, передача полного доменного имени (FQDN) в -ServerInstance необходима для подключения к экземпляру SQL Server, включенного для принудительного шифрования.

Этот параметр является новым в версии 22 модуля.

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-IgnoreProviderContext

Указывает, что этот командлет не использует текущий контекст для переопределения значений параметров ServerInstance, DatabaseName, SchemaName и TableName. Если этот параметр не указан, командлет игнорирует значения этих параметров, если это возможно, в пользу контекста, в котором выполняется командлет.

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-InputData

Указывает данные для записи в базу данных.

Типичные входные данные — это System.Data.DataTable, но можно указать объекты System.Data.DataSet или System.Data.DateRow*.

Свойства параметра

Тип:PSObject
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-InputObject

Задает массив объектов SQL Server Management Objects (SMO), представляющих таблицу, в которую записывается этот командлет.

Свойства параметра

Тип:

Table[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByObject
Position:1
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Passthru

Указывает, что этот командлет возвращает объект SMO. Объект Table . Этот объект представляет таблицу, содержащую добавленные данные. Вы можете работать с таблицей после операции записи.

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Path

Указывает полный путь в контексте поставщика SQL таблицы, в которой этот командлет записывает данные.

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByPath
Position:1
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-SchemaName

Указывает имя схемы для таблицы.

При выполнении этого командлета в контексте базы данных или дочернего элемента базы данных командлет игнорирует это значение параметра. Укажите параметр IgnoreProviderContext для командлета, чтобы использовать значение параметра SchemaName в любом случае.

Командлет поддерживает кворирование значения. Вам не нужно цитировать или экранировать специальные символы.

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-ServerInstance

Указывает имя экземпляра SQL Server. Для экземпляра по умолчанию укажите имя компьютера. Для именованных экземпляров используйте формат ComputerName\InstanceName.

При выполнении этого командлета в контексте базы данных или дочернего элемента базы данных командлет игнорирует это значение параметра. Укажите параметр IgnoreProviderContext для командлета, чтобы использовать значение параметра ServerInstance в любом случае.

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:1
Обязательно:False
Значение из конвейера:True
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-SuppressProviderContextWarning

Указывает, что этот командлет подавляет предупреждающее сообщение, указывающее, что командлет использует контекст поставщика.

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-TableName

Указывает имя таблицы, из которой считывается этот командлет.

При выполнении этого командлета в контексте базы данных или дочернего элемента базы данных командлет игнорирует это значение параметра. Укажите параметр IgnoreProviderContext для командлета, чтобы использовать значение параметра TableName в любом случае.

Командлет поддерживает кворирование значения. Вам не нужно цитировать или экранировать специальные символы.

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

ByName
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Timeout

Задает значение времени ожидания (в секундах) для операции записи. Если значение не указано, командлет использует значение по умолчанию (обычно 30-х). Чтобы избежать времени ожидания, передайте 0. Время ожидания должно быть целым значением от 0 до 65535.

Свойства параметра

Тип:Int32
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-TrustServerCertificate

Указывает, будет ли канал зашифрован при обходе цепочки сертификатов для проверки доверия.

В версии 22 модуля используется $true значение по умолчанию (для совместимости с версией 21). В версии 23+ модуля значение по умолчанию будет иметь значение "$false", которое может создать критическое изменение для существующих скриптов.

Этот параметр является новым в версии 22 модуля.

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

Входные данные

System.Management.Automation.PSObject

System.String

Microsoft.SqlServer.Management.Smo.Table