我如何 return 只有一个数据库的兼容性级别?

How do i return compatibility level of just one database?

我引用了这个页面:https://technet.microsoft.com/en-us/hh213141(v=sql.100)

Import-Module SqlServer

$as = New-Object Microsoft.AnalysisServices.Server  
$as.connect("$Server")  

$as.databases

Write-Host "Compatibility level ="$as.DefaultCompatibilityLevel

但是这 return 所有数据库都回来了...

我只想指定一个数据库以获得兼容级别...

我试过了,

$as.databases["$Database"]

我感兴趣的数据库有 1103 级, 但它似乎不 return 适当的水平,因为它 returning 1200...

我不熟悉这个 API,但我看到 $as.Databases property is of type DatabaseCollection. The DatabaseCollection class does have indexers 需要一个 Int32 或一个 String,就像你试图与 $as.databases["$Database"].

一起使用

请注意 String 索引器的文档说该参数是要返回的数据库的 "identifier"。还要注意Database class has separate properties for ID and Name,所以两者是有区别的。因此,我的建议是,当您尝试以这种方式检索 Database 实例时,请确保您传递的是 ID,而不是名称。

或者,如果您确实想按名称搜索,您可以使用 FindByName method...

$as.Databases.FindByName($Database)

...或GetByName method...

$as.Databases.GetByName($Database)

...区别在于前者returns $null如果不存在这样的数据库而后者抛出异常

如果所有其他方法都失败了,您可以像这样检索所需的数据库...

$as.Databases | Where-Object { $_.ID -eq $Database }

...或者像这样...

$as.Databases | Where-Object { $_.Name -eq $Database }

...取决于哪个属性对应于$Database中的值。

最后,在您的代码中,您正试图访问 DefaultCompatibilityLevel 属性,我没有在 Database class. There is, however, a CompatibilityLevel property.

中看到它的定义