【发布时间】:2013-10-03 15:19:03
【问题描述】:
我正在尝试让此代码片段正常工作。
面向 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传递给这个存储过程?
【问题讨论】:
-
:DATABASE_NAME来自 SQLCMD 模式吗?否则我不太明白这将如何执行。另外,您为什么要获得当前的兼容性级别并将数据库设置为相同的东西?是不是像UPDATE dbo.table SET col = col;? -
您也能准确解释一下您要做什么吗?
-
感谢 Aaron 的支持,但这里的需求并不是很重要。这只是我最近更新的curvehands.dll,在写这个小语句时,所以我不知何故没有看到缺少逗号和END。 :(
标签: sql sql-server compatibility