sql - 通过在 T-SQL 中将值作为局部变量传递来设置兼容性级别

标签 sql sql-server compatibility

我正在尝试让此代码片段正常工作。

针对 SQL 2005 SP2 和更新的 SQL Server 产品。

代码:

BEGIN
DECLARE @level tinyint;
DECLARE @levelvar tinyint;
IF substring(@@VERSION, 23, 4) != '2000'
BEGIN
  select @level = [compatibility_level] from sys.databases where name = DB_name();
  SET @levelvar = @level;
  EXEC sp_dbcmptlevel ":DATABASE_NAME" @level;
END;

是的,如果@levelvar不是必需的,是的,我也可以在sp_dbcmptlevel中使用DB_name(),是的,我可以使用ALTER TABLE,是的,IF在SQL 2012中返回错误的值,但痛苦的是它根本无法在SQL Studio中执行。错误信息是:

Msg 102, Level 15, State 1, Line 9
Incorrect syntax near '@level'.

如何获取传递给此存储过程的局部变量@level/@levelvar

最佳答案

您的代码片段中有两个语法错误。对 sp_dbcmptlevel 的调用中缺少逗号,并且外部 block BEGIN 缺少 END。这个版本适合我编译:

BEGIN
    DECLARE @level tinyint;
    DECLARE @levelvar tinyint;
    IF SUBSTRING(@@VERSION, 23, 4) != '2000'
    BEGIN
      SELECT @level = [compatibility_level] FROM sys.databases WHERE name = DB_NAME();
      SET @levelvar = @level;
      EXEC sp_dbcmptlevel ":DATABASE_NAME", @level;
    END;
END;

关于sql - 通过在 T-SQL 中将值作为局部变量传递来设置兼容性级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19162962/

相关文章:

sql - 在 SQL Server 中合并 XML

mysql - 极慢的MySQL性能

sql - 当 child 有多个 parent 时,SSRS 递归 parent 只给不同的 child

sql-server - 用于在 SQL Server 中保存 XSD 的 BLOB 或 XML

windows - Win95编程为Win8

android - OnGlobalLayoutListener : deprecation and compatibility

mysql - 如果在 SQL 中结果为空,如何返回列值?

sql-server - 如何更改 SSMS 的默认键盘快捷键

SQL Server 2008 使用 WHILE 循环插入

java - Java 字节码是否兼容不同版本的 Java?