您好我想要运行alter database语句并继续收到错误: (这是一个将针对许多数据库运行的脚本)
SELECT is_broker_enabled FROM sys.databases WHERE name = db_name()
DECLARE @SQL NVARCHAR(1024)
IF (SELECT is_broker_enabled FROM sys.databases WHERE name = db_name()) = 0
BEGIN
SET @SQL = N'ALTER DATABASE [' + db_name() + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE';
SELECT @SQL;
sp_executesql @SQL;
SET @SQL = N'ALTER DATABASE [' + db_name() + '] SET ENABLE_BROKER';
SELECT @SQL;
sp_executesql @SQL;
SET @SQL = N'ALTER DATABASE [' + db_name() + '] SET MULTI_USER';
SELECT @SQL;
sp_executesql @SQL;
END
SELECT is_broker_enabled FROM sys.databases WHERE name = db_name()
我一直在
Msg 102,Level 15,State 1,Line 11 'sp_executesql'附近的语法不正确。 Msg 102,Level 15,State 1,Line 15 'sp_executesql'附近的语法不正确。 Msg 102,Level 15,State 1,Line 20 'sp_executesql'附近的语法不正确。
我正在做一些愚蠢的事情 - 但是像大多数语法问题看起来并没有引起看到......
答案 0 :(得分:3)
只允许在没有EXEC的情况下调用存储过程作为批处理中的第一行。你的电话不是。
您是否也考虑过这种结构一次性完成?
SET @SQL = N'
ALTER DATABASE [' + db_name() + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [' + db_name() + '] SET ENABLE_BROKER;
ALTER DATABASE [' + db_name() + '] SET MULTI_USER;
';
SELECT @SQL;
EXEC sp_executesql @SQL;
答案 1 :(得分:2)
尝试使用exec
关键字,如下所示:
exec sp_executesql @SQL;
这就是你如何从存储过程中调用另一个存储过程的方式(你也可以使用EXECUTE
,它完全相同)。注意不要将其与Exec(...)
函数(see also here)混淆。
答案 2 :(得分:1)
试试这个:
EXECUTE sp_executesql @SQL;