Може ли SSIS пакет да се включи в съществуваща външна транзакция?

Зададох смътно подобен въпрос преди (макар и специфичен за стартирането на пакета от xp_cmdshell). Последният ми коментар по въпроса беше да попитам какви са възможностите ми, ако искам да се уверя, че пакетът SSIS ще бъде включен в транзакция.

И така, има ли някакъв начин, по който мога да изпълня SSIS пакет и той да участва във вече съществуваща транзакция?

Причината за това, ако за целите на тестването искаме:

  • Стартирайте пакета, за да заредите данни.
  • Изпълнете тест(ове) срещу заредените данни.
  • Превъртете обратно всички заредени данни.

Благодаря, Стюарт.


person Stuart Whiteford    schedule 15.06.2012    source източник


Отговори (1)


Интернет е много тих относно решенията на този проблем. Имах същия проблем и търсих решение навсякъде. SSIS също е безполезен със съобщенията за грешка, генерирани при неправилно изпълнение (недокументирани кодове за грешка). Отговорът може да е малко закъснял, но се надяваме, че ще помогне на някой да избегне загубеното време. Това е, което в крайна сметка работи за мен.

В единичен тест например обвийте целия процес в TransactionScope:

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew,new TransactionOptions(){IsolationLevel =IsolationLevel.ReadCommitted}))
        { 
          Application app = new Application();
          Package package = app.LoadPackage(packageFileName, null);

          // Can set package settings for test
          package.TransactionOption = DTSTransactionOption.Required;
          package.IsolationLevel = IsolationLevel.ReadCommitted;

          // Use this overload for execute
          DTSExecResult result = package.Execute(null, null, null, null, TransactionInterop.GetDtcTransaction(Transaction.Current));

          // Test results here inside the scope
}

Разбира се, можете да пренаредите това, ако искате да добавите данни към базата данни, след това да ги извлечете чрез SSIS и след това да върнете обратно след тестване на данните.

person Graham Moore    schedule 14.09.2012