DMV查询语法错误异常

时间:2019-01-28 21:03:55

标签: sql powershell ssas 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";

我收到此错误:

  

使用“ 1”参数调用“填充”的异常:“查询(1,41)'的语法。不正确。(从.DISCOVER_SESSIONS中选择[SESSION_ID],[SESSION_SPID])。“
  + [void] $ adapter.Fill($ dataSet)
  + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  + CategoryInfo:未指定:(:) [],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 :(得分:1)

使用单引号字符串:

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

在Powershell中,用双引号引起来的字符串进行字符串插值,即,字符串中的$SYSTEM被变量SYSTEM的值替换,或者在这种情况下为{{ 1}}未定义。