首页 > 解决方案 > 如何从分析服务器获取数据库的兼容级别?

问题描述

我四处搜索,发现有一种方法可以通过以下方式在 powershell 中获取数据库的兼容性级别:

    Import-Module SqlServer

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=$Server;Initial Catalog=$DB;Integrated Security=SSPI"
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conn) 

$db = New-Object Microsoft.SqlServer.Management.Smo.Database  
$db = $srv.Databases.Item("$DB")  

$comp_lvl = New-Object Microsoft.SqlServer.Management.Smo.CompatibilityLevel  
$comp_lvl = $db.CompatiblityLevel  
Write-Host "Compatibility level =" $db.CompatibilityLevel

但是,我在尝试获取分析服务器上的数据库的兼容性级别时遇到错误

获取“项目”的异常:“无法连接到服务器......”

我意识到它可能适用于常规数据库引擎,但其他东西可能用于分析服务器。我在 MS Docs 上环顾四周,并没有真正找到任何有用的东西。

所以这甚至可能吗?

更新:

我能够在此页面上找到一些东西: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"]

但似乎没有返回正确的级别,因为我通过的 DB 的 lvl 为 1103,而不是 1200...

标签: sql-serverpowershellazure-sql-databasessas

解决方案


我想到了!

Import-Module SqlServer

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

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

Write-Host "Compatibility level =" $c.CompatibilityLevel

推荐阅读