web-dev-qa-db-ja.com

ストアドプロシージャを呼び出すSSISパッケージを見つける

以下のようなエラーログテーブルにエラーをキャッチしようとしています。マスターSSISパッケージが多数あり、多くのストアドプロシージャを呼び出しています。

次のコードは、エラーログテーブルにログインします。ストアドプロシージャを実行したSSISパッケージを検索するためのSQL予約キーワードはありますか?

insert into dbo.ErrorLogData
(
    ErrorNumber 
    ,ErrorDescription 
    ,ErrorProcedure 
    ,ErrorState 
    ,ErrorSeverity 
    ,ErrorLine 
    ,ErrorTime 
    ,SSISPackage --???
)
VALUES
(
    ERROR_NUMBER()
    ,ERROR_MESSAGE()
    ,ERROR_PROCEDURE()
    ,ERROR_STATE()
    ,ERROR_SEVERITY()
    ,ERROR_LINE()
    ,GETDATE()  
    -- what is reserved keyword for SSIS package?
);

SQL Server:ストアドプロシージャ内のエラーログとレポート

1
user172334

私の知る限り、パッケージ名を提供する組み込み関数はありません。あなたが手に入れる最も近いのは APP_NAME 関数を使うことだと思います。これは、名前を指定するために接続文字列の一部として渡されるパラメーターに依存します。つまり、いつでも変更できることを意味しますが、プラスの側面では、必要なだけ柔軟にできることも意味します。

ただし、クライアント側で設定されているため、ドキュメントには次の警告が含まれています。

クライアントはアプリケーション名を提供し、APP_NAMEはアプリケーション名の値を確認しません。セキュリティチェックの一部としてAPP_NAMEを使用しないでください。

ただし、クライアントが接続に値を設定した場合は、次のような結果になります(上記のリンクからSql Server Management Studioを使用した例)。

USE AdventureWorks2012;  
GO  
IF APP_NAME() = 'Microsoft SQL Server Management Studio - Query'  
PRINT 'This process was started by ' + APP_NAME() + 
      '. The date is ' + CONVERT ( varchar(100) , GETDATE(), 101) + '.';  
ELSE   
PRINT 'This process was started by ' + APP_NAME() + 
      '. The date is ' + CONVERT ( varchar(100) , GETDATE(), 102) + '.';  
GO 
0
Mr.Brownstone