【问题标题】:using batch seperator 'GO' in dynamic sql query [duplicate]在动态 sql 查询中使用批处理分隔符“GO”[重复]
【发布时间】:2016-01-09 19:02:35
【问题描述】:

下面是代码;

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 命令时,我得到一个错误:

消息 111,级别 15,状态 1,程序 sp_sp_duration_create_sp_duration_data_log,第 16 行“创建/更改” PROCEDURE' 必须是查询批处理中的第一条语句。

我想我需要在 query 中使用 'GO' ,但是当我使用 GO 时会出现另一个错误。 (名为“GO”或其他名称的无效对象)。

【问题讨论】:

  • 您不能在动态 SQL 语句中使用 GO,因为 GO 不是有效的 T-SQL 命令,请参阅:msdn.microsoft.com/en-us/library/ms188037.aspx GO is not a Transact-SQL statement; it is a command recognized by the sqlcmd and osql utilities and SQL Server Management Studio Code editor.

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


【解决方案1】:

试试这个

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

【讨论】:

    【解决方案2】:
    SET @QUERY = 'SET ANSI_NULLS ON GO
    SET QUOTED_IDENTIFIER ON GO
    

    //your code ';

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

    【讨论】:

    • Msg 102, Level 15, State 1, Line 1 'GO' 附近的语法不正确。
    • 我尝试了,但我再次收到错误
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2013-01-06
    • 2010-10-05
    • 1970-01-01
    相关资源
    最近更新 更多