alter database和set命令的语法问题

时间:2011-12-17 12:47:33

标签: sql-server

您好我想要运行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'附近的语法不正确。

我正在做一些愚蠢的事情 - 但是像大多数语法问题看起来并没有引起看到......

3 个答案:

答案 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;