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
不会生成任何警告。