以下のようなエラーログテーブルにエラーをキャッチしようとしています。マスター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?
);
私の知る限り、パッケージ名を提供する組み込み関数はありません。あなたが手に入れる最も近いのは 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