Неправильное исключение синтаксиса запроса DMV
Я пишу простую функцию запросов, чтобы сделать мой скрипт эффективным и простым, так как я начинаю писать больше запросов в будущем.
Function Query($Query) {
$connectionString = "Provider=msolap;Data Source=$Server;Initial Catalog=$Database;"
$connection = New-Object System.Data.OleDb.OleDbConnection $connectionString
$command = New-Object System.Data.OleDb.OleDbCommand
$command.Connection = $connection
$command.CommandText = $Query
$connection.Open()
$adapter = New-Object System.Data.OleDb.OleDbDataAdapter #$command
$adapter.SelectCommand = $command
$dataset = New-Object System.Data.DataSet
[void] $adapter.Fill($dataSet)
$connection.Close()
$dataSet.Tables[0]
}
запрос
SELECT [SESSION_ID], [SESSION_SPID]
FROM $SYSTEM.DISCOVER_SESSIONS";
Я получаю эту ошибку:
Исключение, вызывающее "Fill" с аргументом (ами) "1": "Запрос (1, 41) Синтаксис для". " неверно. (ВЫБЕРИТЕ [SESSION_ID], [SESSION_SPID] FROM.DISCOVER_SESSIONS). "
+ [void] $ adapter.Fill ($ dataSet)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: OleDbException
Я что-то пропустил? Я следовал синтаксису для MSDocs:
И я действительно попробовал это успешно, не создавая функцию запроса, и она отображала результаты. каким-то образом сделать его как функцию запроса, это не работает...
1 ответ
Используйте строки в одинарных кавычках:
Query 'SELECT [SESSION_ID],[SESSION_SPID] FROM $SYSTEM.DISCOVER_SESSIONS';
В Powershell строка в двойных кавычках выполняет интерполяцию строк, т.е. $SYSTEM
в вашей строке заменяется значение переменной SYSTEM
или (в этом случае) пустой строкой, когда SYSTEM
не определено.