我试图让这个代码snipp工作.
针对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调用中缺少逗号,外部块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;