Write-SqlTableData
Записывает данные в таблицу базы данных SQL.
Синтаксис
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>]
Описание
Командлет 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.TaskManagerDump
на MyServer\MyInstance
.
Так как вы указываете параметр
Пример 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
с помощью Service Principal
или Managed Identity
.
Используемый параметр может быть строкой, представляющей маркер или объект PSAccessToken
, как возвращается при выполнении Get-AzAccessToken -ResourceUrl https://database.windows.net
.
Этот параметр является новым в версии 22 модуля.
Тип: | PSObject |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-ConnectionTimeout
Указывает количество секунд ожидания подключения к серверу до сбоя времени ожидания. Значение времени ожидания должно быть целым числом от 0 до 65534. Если задано значение 0, попытки подключения не истекает.
Тип: | Int32 |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-ConnectToDatabase
При установке подключения принудительная командлету использовать переданный в базе данных (-DatabaseName
) в качестве начального каталога.
Этот параметр может быть полезен, чтобы разрешить пользователям с низким уровнем привилегий подключаться к существующей базе данных для операции записи.
не использовать при создании базы данных.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Credential
Указывает объект PSCredential для подключения к SQL Server. Чтобы получить объект учетных данных, используйте командлет Get-Credential. Для получения дополнительных сведений введите Get-Help Get-Credential.
Тип: | PSCredential |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-DatabaseName
Указывает имя базы данных, содержащей таблицу.
Командлет поддерживает кворирование значения. Вам не нужно цитировать или экранировать специальные символы.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Encrypt
Тип шифрования, используемый при подключении к SQL Server.
Это значение сопоставляется со свойством Encrypt
SqlConnectionEncryptOption
в объекте SqlConnection драйвера Microsoft.Data.SqlClient.
В версии 22 модуля по умолчанию используется Optional
(для совместимости с версией 21). В версии 23+ модуля значение по умолчанию будет "Обязательный", которое может создать критическое изменение для существующих скриптов.
Этот параметр является новым в версии 22 модуля.
Тип: | String |
Допустимые значения: | Mandatory, Optional, Strict |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Force
Указывает, что этот командлет создает отсутствующие объекты SQL Server. К ним относятся база данных, схема и таблица. Для создания этих объектов необходимо иметь соответствующие учетные данные.
Если этот параметр не указан для отсутствующих объектов, командлет возвращает ошибку.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-HostNameInCertificate
Имя узла, используемое при проверке TLS/SSL-сертификата SQL Server. Этот параметр необходимо передать, если экземпляр SQL Server включен для принудительного шифрования и требуется подключиться к экземпляру с помощью имени узла или короткого имени. Если этот параметр опущен, передача полного доменного имени (FQDN) в -ServerInstance необходима для подключения к экземпляру SQL Server, включенного для принудительного шифрования.
Этот параметр является новым в версии 22 модуля.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-IgnoreProviderContext
Указывает, что этот командлет не использует текущий контекст для переопределения значений ServerInstance, DatabaseName, SchemaNameи параметров TableName. Если этот параметр не указан, командлет игнорирует значения этих параметров, если это возможно, в пользу контекста, в котором выполняется командлет.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-InputData
Указывает данные для записи в базу данных.
Типичные входные данные — это System.DataTable, но можно указать объекты System.Data.DataSet или System.Data.DateRow* .
Тип: | PSObject |
Position: | Named |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-InputObject
Задает массив объектов SQL Server Management Objects (SMO), представляющих таблицу, в которую записывается этот командлет.
Тип: | Table[] |
Position: | 1 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-Passthru
Указывает, что этот командлет возвращает SMO. Объект табличного. Этот объект представляет таблицу, содержащую добавленные данные. Вы можете работать с таблицей после операции записи.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Path
Указывает полный путь в контексте поставщика SQL таблицы, в которой этот командлет записывает данные.
Тип: | String[] |
Position: | 1 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-ProgressAction
Определяет, как PowerShell реагирует на обновления хода выполнения, созданные скриптом, командлетом или поставщиком, например индикаторами хода выполнения, созданными командлетом Write-Progress. Командлет Write-Progress создает индикаторы хода выполнения, показывающие состояние команды.
Тип: | ActionPreference |
Aliases: | proga |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-SchemaName
Указывает имя схемы для таблицы.
При выполнении этого командлета в контексте базы данных или дочернего элемента базы данных командлет игнорирует это значение параметра. Укажите параметр IgnoreProviderContext для командлета, чтобы использовать значение параметра SchemaName в любом случае.
Командлет поддерживает кворирование значения. Вам не нужно цитировать или экранировать специальные символы.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-ServerInstance
Указывает имя экземпляра SQL Server.
Для экземпляра по умолчанию укажите имя компьютера.
Для именованных экземпляров используйте формат ComputerName\InstanceName
.
При выполнении этого командлета в контексте базы данных или дочернего элемента базы данных командлет игнорирует это значение параметра.
Укажите параметр
Тип: | String[] |
Position: | 1 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-SuppressProviderContextWarning
Указывает, что этот командлет подавляет предупреждающее сообщение, указывающее, что командлет использует контекст поставщика.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-TableName
Указывает имя таблицы, из которой считывается этот командлет.
При выполнении этого командлета в контексте базы данных или дочернего элемента базы данных командлет игнорирует это значение параметра. Укажите параметр IgnoreProviderContext для командлета, чтобы использовать значение параметра TableName в любом случае.
Командлет поддерживает кворирование значения. Вам не нужно цитировать или экранировать специальные символы.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Timeout
Задает значение времени ожидания (в секундах) для операции записи. Если значение не указано, командлет использует значение по умолчанию (обычно 30-х). Чтобы избежать времени ожидания, передайте 0. Время ожидания должно быть целым значением от 0 до 65535.
Тип: | Int32 |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-TrustServerCertificate
Указывает, будет ли канал зашифрован при обходе цепочки сертификатов для проверки доверия.
В версии 22 модуля по умолчанию используется $true
(для совместимости с версией 21). В версии 23+ модуля значение по умолчанию будет иметь значение "$false", которое может создать критическое изменение для существующих скриптов.
Этот параметр является новым в версии 22 модуля.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
System.Management.Automation.PSObject
System.String[]
Microsoft.SqlServer.Management.Smo.Table[]