2016-05-02 9 views
1

- EDIT -
私の質問に答えましたが解決策は です。誰かが 本当の答えを提供できる場合、私はそれらに解決策を与えます。
----
印刷がTSQLで警告を生成しないようにする

私は成功せず、ストアドプロシージャで印刷ステートメントを使用したときに警告を生成するからMS SQLを防止するためのソリューションの周りで検索しました。

私はETLアプリケーションからこの手順を実行しており、エラーや警告なしで終了するにはストアドプロシージャが必要です。

FYI - ストアドプロシージャがETLプロセスによって実行されるときに、printステートメントは必要ありません。それらは手動で実行されます。

私はSET ANSI WARNINGSをオフにして試してみましたが、まだ出力上に警告が表示されています。

これはストアドプロシージャです:これは実行結果である


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 
+1

手動またはETLを使用して実行するときに区別するためのパラメータを追加して、それに応じて 'print'を使用することができます – Lamak

+1

ここでの回答を参照してください:http://stackoverflow.com/questions/3212658/disable-print-in -sql-server – HoneyBadger

+0

「ストアドプロシージャでプリントステートメントを使用しているときにMS SQLが警告を生成しないようにする」に関しては、より具体的にしてください。あなたはどんな警告をしていますか?ストアドプロシージャで 'PRINT'を使用しても警告は生成されません。 –

答えて

1

、これは私が思いついた解決策が..です


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の値を渡すだけで、(偽の)警告なしでジョブを完了できるようにするprint文を抑制します。

関連する問題