У меня есть одна команда TSQL, которую я использую в контейнере последовательности служб SSIS в исполняемом файле «Выполнить задачу sql».Мне нужно вставить данные в архивную БД / таблицу, которая совпадает с PROD и прикреплена к тому же экземпляру стандарта SQL 2016 edt.Я вставляю около 5671294 записей и тем временем обновляю флаг в другой справочной / рабочей таблице, которая используется в дальнейших проверках.Мой цикл никогда не заканчивается после обновления последних 71294 записей.На мониторе активности я вижу, застрял в команде UPDATE и нет колонок для обновления.Другая проблема заключается в том, что это работает очень медленно (БД в простом восстановлении).
SET IDENTITY_INSERT ArchiveDB..Table ON
GO
DECLARE @InsertRowCnt INT
SET @InsertRowCnt = 1
DECLARE @InsertBatchSize INT
SET @InsertBatchSize=100000
WHILE (@InsertRowCnt > 0)
BEGIN
DECLARE @OutputTbl AS TABLE(BSGID INT)
INSERT INTO ArchiveDB..Table ([BSGID], [Identifier],[SystemCombinationItems], [TotalItems], [TotalBankers],[SpecialCombinationID], [ModifiedOn], [ModifiedBy], [CreatedOn])
OUTPUT inserted.BSGID INTO @OutputTbl(BSGID)
SELECT TOP (@InsertBatchSize) s.BSGID, s.Identifier,
s.SystemCombinationItems, s.TotalItems, s.TotalBankers, s.SpecialCombinationID, s.ModifiedOn,
s.ModifiedBy, s.CreatedOn
FROM ProdDB.dbo.Table AS s WITH (NOLOCK) INNER JOIN
ArchiveDB.dbo.StageTable AS t WITH (NOLOCK) ON s.BSGID = t.BSGID
WHERE t.IsInserted IS NULL
----Updating stage table contains 2 columns BSGID int,IsInserted int null
UPDATE arh
SET arh.IsInserted=1
FROM ArchiveDB.dbo.StageTable AS arh WITH(NOLOCK)
INNER JOIN @OutputTbl AS a
ON arh.BSGID=a.BSGID
WHERE arh.IsInserted is null
SET @InsertRowCnt = @@ROWCOUNT;
END
SET IDENTITY_INSERT ArchiveDB..Table OFF
GO