Sql server 防止打印在TSQL中生成警告

Sql server 防止打印在TSQL中生成警告,sql-server,tsql,Sql Server,Tsql,--编辑-- 我已经回答了我的问题,但解决办法是 更多的是一种工作。如果有人能提供 真正的答案我将把解决方案授予他们。 ---- 我已经四处寻找解决方案,以防止MS SQL在存储过程中使用打印语句时生成警告,但没有成功 我正在从我们的ETL应用程序执行这个过程,我需要存储过程在没有错误或警告的情况下退出 仅供参考-当ETL进程执行存储过程时,不需要打印语句。当它被手动执行时,它们就在那里 我已尝试关闭ANSI警告并尝试/捕获,但仍在输出上收到警告 这是存储过程: CREATE PROCEDUR

--编辑--
我已经回答了我的问题,但解决办法是 更多的是一种工作。如果有人能提供 真正的答案我将把解决方案授予他们。
----

我已经四处寻找解决方案,以防止MS SQL在存储过程中使用打印语句时生成警告,但没有成功

我正在从我们的ETL应用程序执行这个过程,我需要存储过程在没有错误或警告的情况下退出

仅供参考-当ETL进程执行存储过程时,不需要打印语句。当它被手动执行时,它们就在那里

我已尝试关闭ANSI警告并尝试/捕获,但仍在输出上收到警告

这是存储过程:


CREATE PROCEDURE [dbo].[spBackupSomeTables]
AS
BEGIN TRY
    SET ANSI_WARNINGS OFF
    PRINT 'Copying SomeTable1 to Z_Backup_SomeTable1' +  CHAR(10)
    SET ANSI_WARNINGS ON
    TRUNCATE TABLE  Z_Backup_SomeTable1
    INSERT INTO   Z_Backup_SomeTable1
    SELECT *
    FROM   SomeTable1

    SET ANSI_WARNINGS OFF
    PRINT 'Copying SomeTable2 to Z_Backup_SomeTable2' +  CHAR(10)
    SET ANSI_WARNINGS ON
    TRUNCATE TABLE  Z_Backup_SomeTable2
    INSERT INTO   Z_Backup_SomeTable2
    SELECT *
    FROM   SomeTable2

    SET ANSI_WARNINGS OFF
    PRINT 'All Done' +  CHAR(10)
    SET ANSI_WARNINGS ON

END TRY
BEGIN CATCH

    DECLARE     
        @ErrorNumber   VARCHAR(1000),
        @ErrorSeverity   VARCHAR(1000),
        @ErrorState   VARCHAR(1000),
        @ErrorProcedure   VARCHAR(1000),
        @ErrorLine   VARCHAR(1000),
        @ErrorMessage   VARCHAR(1000)


    SET @ErrorNumber = (SELECT ERROR_NUMBER() AS ErrorNumber)
    SET @ErrorSeverity = (SELECT ERROR_SEVERITY() AS ErrorSeverity)
    SET @ErrorState = (SELECT ERROR_STATE() AS ErrorState)
    SET @ErrorProcedure = (SELECT ERROR_PROCEDURE() AS ErrorProcedure)
    SET @ErrorLine = (SELECT ERROR_LINE() AS ErrorLine)
    SET @ErrorMessage = (SELECT ERROR_MESSAGE() AS ErrorMessage)


    PRINT 'ErrorNumber: ' + @ErrorNumber + CHAR(10)
    PRINT 'ErrorSeverity: ' + @ErrorSeverity + CHAR(10)
    PRINT 'ErrorState: ' + @ErrorState + CHAR(10)
    PRINT 'ErrorProcedure: ' + @ErrorProcedure + CHAR(10)
    PRINT 'ErrorLine: ' + @ErrorLine + CHAR(10)
    PRINT 'ErrorMessage: ' + @ErrorMessage + CHAR(10)

END CATCH
GO
这是执行结果:

Warnings: ---> W (1): Copying SomeTable1 to Z_Backup_SomeTable1 W (2): Copying SomeTable2 to Z_Backup_SomeTable2 W (3): All Done 警告:--> W(1):将SomeTable1复制到Z_Backup_SomeTable1 W(2):将SomeTable2复制到Z_Backup_SomeTable2 W(3):全部完成
在评论中使用建议/链接,这就是我提出的解决方案


CREATE PROCEDURE [dbo].[spBackupSomeTables] @Debug tinyint =1
AS
BEGIN

     IF @Debug IS NULL
        SET @Debug = 1;    

     IF @Debug > 0 
        RAISERROR( 'Copying SomeTable1 to Z_Backup_SomeTable1', 0, 1 ) WITH NOWAIT
    TRUNCATE TABLE  Z_Backup_SomeTable1
    INSERT INTO   Z_Backup_SomeTable1
    SELECT *
    FROM   SomeTable1

    IF @Debug > 0 
        RAISERROR( 'Copying SomeTable2 to Z_Backup_SomeTable2', 0, 1 ) WITH NOWAIT
    TRUNCATE TABLE  Z_Backup_SomeTable2
    INSERT INTO   Z_Backup_SomeTable2
    SELECT *
    FROM   SomeTable2

    IF @Debug > 0 
        RAISERROR( 'All Done', 0, 1 ) WITH NOWAIT
END
GO

@Debug参数的默认值为1,这样人们就不必为了查看打印的状态消息而担心传递任何参数。ETL作业只需为该参数传递一个值0,以抑制打印语句,从而使作业在没有任何(错误)警告的情况下完成。

您可以添加一些参数,以便在手动或通过ETL运行时进行区分,并使用
打印
,请参见此处的答案:关于“防止MS SQL在存储过程中使用print语句时生成警告”:请更具体一点。您到底看到了什么警告?在存储过程中使用
print
不会生成任何警告。