У меня есть очень простой пакет служб SSIS с одной задачей потока данных (из источника OLE DB в плоский файл).
Для свойства TransactionOption установлено значение Required, и я попытался установить для параметра IsolationLevel значение ReadCommitted, ReadUncommitted и Serializable.
Пакет экспортирует все строки из таблицы [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, и если нет, то может ли это быть?