Я пытаюсь получить некоторые данные из базы данных SQL внутри шага PowerShell в задании агента SQL. Я могу ясно получить результаты назад, но не могу выделить отдельные значения столбцов.
Вот простой пример, иллюстрирующий проблему.
Предположим, у нас есть эта простая таблица с несколькими записями. и запрос для извлечения одной строки из таблицы:
CREATE TABLE MyTable
(
MyTableID INT NOT NULL,
MyString VARCHAR(100) NOT NULL,
MyInt INT NOT null,
MyDate DATETIME NOT NULL
)
INSERT INTO dbo.MyTable
(
MyTableID,
MyString,
MyInt,
MyDate
)
VALUES
( 1, 'Record Won', 101, '2020/4/1 13:01'),
( 2, 'Record Too', 102, '2020/4/2 14:02'),
( 3, 'Record 333', 103, '2020/4/3 15:03'),
( 4, 'Record For', 104, '2020/4/4 16:04')
SELECT TOP(1) MyString, MyInt, MyDate FROM MyTable ORDER BY MyTableID desc
Теперь предположим, что мы создаем SQL Задание с шагом PowerShell и пробуем это содержимое PS:
$ConnStr = "YourSQLServer;database='YourDatabase';trusted_connection=true;"
$Query = "SELECT TOP(1) MyString, MyInt, MyDate FROM MyTable ORDER BY MyTableID DESC"
$SqlConn = new-object System.Data.SqlClient.SqlConnection;
$SqlConn.ConnectionString = $ConnStr
$SQLCmd = new-object System.Data.SqlClient.SqlCommand;
$SqlCmd.Connection = $SqlConn
$SqlCmd.CommandText = $Query
$SqlAd = new-object System.Data.SqlClient.SqlDataAdapter
$SqlAd.SelectCommand = $SqlCmd
$DataSet = new-object System.Data.Dataset
$recCount = $SqlAd.Fill($DataSet)
$Data = $DataSet.Tables[0]
Write-Output "Data="$Data
Write-Output $Data.MyString
Write-Output $Data.MyInt
Write-Output $Data.MyDate
Вот вывод журнала:
Data=
MyString MyInt MyDate
-------- ----- ------
Record For 104 4/4/2020 4:04:00 PM
Итак, как вы видите, отображается полный объект $ Data, все три столбца. Однако вывод трех отдельных столбцов ничего не показал ?! Можно предположить, что они являются нулевыми, и если я пытаюсь добавить вызов метода, подобный toString (), я получаю ошибку, указывающую, что они действительно являются нулевыми («Вы не можете вызвать метод для выражения с нулевым значением.»). Я не понимаю, так как уже продемонстрировал, что извлек данные из БД!
Я попробовал точно такое же содержимое сценария PS в PowerShell ISE, и столбцы varchar & int отображаются, но не столбец даты. В PS ISE, если я приведу дату к varchar или добавлю вызов метода toString (), я получу столбец с датой, отображаемый очень хорошо. Ни одна из техник не помогает сценарию PS на этапе PowerShell в моем SQL задании. Любые идеи о том, как получить доступ к значениям для этих столбцов?