4

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

面向 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不是必需的,是的,我也DB_name()可以在 中使用sp_dbcmptlevel,是的,我可以使用ALTER TABLE,是的,IF在 SQL 2012 中返回错误值,但痛苦的是它根本无法在 SQL Studio 中执行。错误信息是:

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

如何获取局部变量@level/@levelvar传递给这个存储过程?

4

1 回答 1

2

您的代码片段中有两个语法错误。调用 sp_dbcmptlevel 时缺少逗号,外部块 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;
于 2013-10-04T00:49:05.187 回答