【问题标题】:Setting SQL Server compatibility level based on the server in script在脚本中根据服务器设置 SQL Server 兼容级别
【发布时间】:2016-06-23 19:21:07
【问题描述】:

当我尝试在脚本中设置 SQL Server 的兼容性级别时,它会在 SQL Server 2008 中出错。我希望此脚本对我们当前支持的所有服务器(2008、2012 或 2014)执行相同。

-- Set database compatibility --
IF SUBSTRING(CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR),1 ,2) >= 11
BEGIN
    RAISERROR ('sql server 12 and above', 10, 1)

    ALTER DATABASE JJAI_TESTDB SET COMPATIBILITY_LEVEL = 110
END
ELSE
BEGIN
    RAISERROR ('sql server 2008',10, 1)

    ALTER DATABASE JJAI_TESTDB SET COMPATIBILITY_LEVEL = 100
END
GO

以下是错误:

Msg 15048, Level 16, State 1, Line 5
Valid values of the database compatibility level are 80, 90, or 100.

【问题讨论】:

  • 错误是什么?
  • 看起来错误发生在第一个 alter 语句上。如果您使用 if 条件进行打印,您会得到什么产品版本?
  • 我的产品版本是 2008。所以脚本实际上没有执行,而是编译本身或预处理失败
  • 由于ALTER DATABASE 改变了语句的处理方式,它需要在单独的批处理中执行。请参阅this 答案。

标签: sql-server sql-server-2008 tsql sql-server-2012


【解决方案1】:

好的,我可以通过在下面的执行语句中执行 alter 语句来做到这一点。

/* Set database compatibility */
IF SUBSTRING(CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR),1 ,2) >= 11
    EXECUTE ('ALTER DATABASE $(DATABASENAME) SET COMPATIBILITY_LEVEL = 110')
ELSE
    EXECUTE ('ALTER DATABASE $(DATABASENAME) SET COMPATIBILITY_LEVEL = 100')
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多