是否可以以编程方式确定特定 SQL Server 实例支持的最高兼容性级别,或者至少将数据库级别设置为实例的默认级别,而无需事先知道那是什么?
这里的动机是我之前将所有数据库设置为较早的兼容性级别。现在我想将它们迁移到更高的级别以从新功能中受益,但我不想破坏那些碰巧仍在运行旧版 SQL Server 版本的客户的事情。
ALTER DATABASE会让我选择一个特定的兼容性级别,例如 150,但我看不到一种方法来将其设置为实例的默认级别,或者确定支持的最高级别,除非可能通过一些涉及解析版本号的 hack (虽然这看起来不是特别可靠)。
不幸的是,SQL Server 中没有内置的方法来执行此操作。SSMS 和大多数其他工具确实只是解析版本信息。
这是一个可怕的黑客方法,可以从由于提供不正确的兼容性级别而产生的错误消息中获取信息。
BEGIN TRY
EXEC('
ALTER DATABASE master
SET COMPATIBILITY_LEVEL = 0;
');
END TRY
BEGIN CATCH
DECLARE @msg nvarchar(4000) = ERROR_MESSAGE();
SELECT SUBSTRING(@msg, LEN(@msg) - 3, 3);
END CATCH;
Run Code Online (Sandbox Code Playgroud)
作为参考,消息是这样的,最后一个值是最高的。
Valid values of the database compatibility level are 100, 110, 120, 130, 140, 150 or 160.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |