Неправильное исключение синтаксиса запроса 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:

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам