在动态 SQL 查询中使用批处理分隔符'GO'



代码如下;

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,级别15,状态1,过程sp_sp_duration_create_sp_duration_data_log,第16行"创建/修改"

我想我需要在查询中使用'GO',但是当我使用GO时,另一个错误发生了。(名为"GO"或其他东西的无效对象)。

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

//your code ';

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

试试这个

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);

最新更新