私は、(OLE DBソースからフラットファイルへ)1つのデータフロータスクを持つ非常に基本的なSSISパッケージを持っています。xp_cmdshellを使用して呼び出されたSSISパッケージをSQL Serverトランザクションに参加させることはできますか?
TransactionOptionプロパティは必須に設定されていると私はReadCommittedに、READUNCOMMITTEDおよび直列化に設定したIsolationLevelオプションを試してみました。
パッケージは、テーブル[TestTable]からすべての行をフラットファイルにエクスポートします。
私は、次のSQLスクリプト(私は一瞬Management Studioで実行していることを)持っている:中ので、私は、パッケージを実行する前に、テーブルからすべての行を削除するよ
BEGIN TRANSACTION
DELETE FROM [dbo].[TestTable]
DECLARE @SsisString VARCHAR(8000)
DECLARE @PackageName VARCHAR(200)
DECLARE @ServerName VARCHAR(100)
DECLARE @ReturnCode INT
SET @PackageName = 'TransactionalTestPackage'
SET @ServerName = 'SERVERNAME'
SET @SsisString = 'dtexec /sq ' + @PackageName + ' /ser ' + @ServerName + ' '
EXEC @ReturnCode = xp_cmdshell @SsisString
SELECT @ReturnCode
--COMMIT TRANSACTION
ROLLBACK TRANSACTION
注意をパッケージはファイルにゼロ行をエクスポートするはずですが、実際にはパッケージがハングしています(TestTable上のコミットされていない削除のためだと思います)。質問です:この方法で呼び出されたSSISパッケージは、実際にSQLブロックの先頭で開始されたトランザクションに参加していますか?
OKです。 DELETEがパッケージ外にある理由は、これがテスト実行の一部であり、DELETEが既存のデータをすべて消去するためです。現実にはそうしないでしょうし、既存のデータに遭遇した場合、SSISパッケージは失敗します。 SSISパッケージがトランザクションで登録して、TransactionScopeの.NETアプリケーションから呼び出すのを確実にしたいのであれば、私のオプションは何ですか?SQL Agentジョブから開始しますか? –