如何返回仅一个数据库的兼容性级别?

时间:2018-10-03 22:11:48

标签: powershell azure-sql-database ssas

我引用了此页面: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

但这会返回所有数据库...

我只想指定一个数据库来获得...的兼容性级别。

我尝试过

$as.databases["$Database"]
我感兴趣的数据库的等级为1103, 但似乎未返回适当的水平,因为其返回1200 ...

1 个答案:

答案 0 :(得分:1)

我对该API并不熟悉,但是我发现$as.Databases property的类型为DatabaseCollectionDatabaseCollection类的indexers确实带有Int32String,就像您尝试与$as.databases["$Database"]一起使用一样。

请注意,String索引器的文档说该参数是要返回的数据库的“标识符”。还要注意,Database class对于IDName具有单独的属性,因此两者之间是有区别的。因此,我的建议是,当您尝试以这种方式检索Database实例时,请确保传递的是ID,而不是名称。

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

$as.Databases.FindByName($Database)

...或GetByName method ...

$as.Databases.GetByName($Database)

......不同之处在于,如果不存在这样的数据库,前者将返回$null,而后者会引发异常。

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

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

...或者像这样...

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

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

最后,在您的代码中,您尝试访问DefaultCompatibilityLevel属性,但在Database class中没有看到该属性。但是有CompatibilityLevel property