在动态sql查询中使用批处理分隔符“GO”

时间:2015-10-12 10:23:08

标签: sql sql-server tsql stored-procedures dynamic-sql

以下是代码;

SET @QUERY = '

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
-- 
CREATE PROCEDURE [dbo].[sp_sp_duration_create_sp_duration_data_log]
@sp_name varchar(100),
@duration int,
@details varchar(250)
AS
BEGIN

IF @duration > 100
Begin
INSERT INTO [sp_duration_logs]
           ([sp_name]
           ,[duration]
           ,[details])
     VALUES
           (@sp_name
           ,@duration
           ,@details)
END
END

';
EXECUTE('USE ['+@DBNAME+']; '+@QUERY);

当我尝试执行此t-sql命令时,出现错误:

  

Msg 111,Level 15,State 1,Procedure   sp_sp_duration_create_sp_duration_data_log,第16行'CREATE / ALTER   PROCEDURE'必须是查询批处理中的第一个语句。

我认为我需要在查询中使用'GO',但是当我使用GO时会发生另一个错误。 (名为“GO”的无效对象或其他内容)。

2 个答案:

答案 0 :(得分:0)

SET @QUERY = 'SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO

//your code ';

EXECUTE('USE ['+@DBNAME+'] GO '+@QUERY);

答案 1 :(得分:0)

试试这个

SET @QUERY = '

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_sp_duration_create_sp_duration_data_log]
@sp_name varchar(100),
@duration int,
@details varchar(250)
AS
BEGIN

        IF @duration > 100
        Begin
        INSERT INTO [sp_duration_logs]
                   ([sp_name]
                   ,[duration]
                   ,[details])
             VALUES
                   (@sp_name
                   ,@duration
                   ,@details)
        END
END ';
EXECUTE('USE ['+@DBNAME+']; '+@QUERY);