Шаг PowerShell в SQL задании агента - невозможно получить доступ к столбцам из набора результатов - PullRequest
1 голос
/ 22 апреля 2020

Я пытаюсь получить некоторые данные из базы данных 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 задании. Любые идеи о том, как получить доступ к значениям для этих столбцов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...