Неправильное исключение синтаксиса запроса DMV - PullRequest
0 голосов
/ 29 января 2019

Я пишу простую функцию запроса, чтобы сделать мой скрипт эффективным и простым, так как я начинаю писать больше запросов в будущем.

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": "Query (1, 41) Синтаксис для «.»неверно. (ВЫБЕРИТЕ [SESSION_ID], [SESSION_SPID] FROM .DISCOVER_SESSIONS). "
+ [void] $ adapter.Fill ($ dataSet)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: OleDbException

Ячто-то упустил?Я следовал синтаксису для MSDocs:

https://docs.microsoft.com/en-us/sql/analysis-services/instances/use-dynamic-management-views-dmvs-to-monitor-analysis-services?view=sql-server-2017

И я действительно попробовал его успешно, не создав функцию запроса, и он отобразил результаты.каким-то образом с созданием функции запроса это не работает ...

1 Ответ

0 голосов
/ 29 января 2019

Используйте строки в одинарных кавычках:

Query 'SELECT [SESSION_ID],[SESSION_SPID] FROM $SYSTEM.DISCOVER_SESSIONS';

В Powershell строка в двойных кавычках выполняет интерполяцию строк, т.е. $SYSTEM в вашей строке заменяется значением переменной SYSTEM, или(в этом случае) пустая строка, когда SYSTEM не определено.

...