1
У меня есть хранимая процедура в SQL Server, который чистки записи из таблицы, совершая каждый 5000:COMMIT не имеет ошибки BEGIN только при запуске по расписанию?
DECLARE AuditEventCursor CURSOR FOR
SELECT E.EVENT_ID
FROM XI31AUDIT2..AUDIT_EVENT E
WHERE E.START_TIMESTAMP < GETDATE() - 14;
DECLARE @EventID VARCHAR(64);
DECLARE @DetailID INT;
DECLARE @i INT;
BEGIN
--- Initialize variables
SET @EventID = '';
SET @DetailID = -1;
SET @i = 0;
-- Open cursor for records to delete from AUDIT_EVENT
OPEN AuditEventCursor;
-- Fetch first EVENT_ID
FETCH NEXT FROM AuditEventCursor
INTO @EventID;
-- Loop while we still have records
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM AUDIT_EVENT
WHERE EVENT_ID = @EventID;
-- Increment counter and commit every 5000
SET @i = @i + 1;
IF @i % 5000 = 0
COMMIT;
-- Fetch next EVENT_ID
FETCH NEXT FROM AuditEventCursor
INTO @EventID;
END;
-- Close cursor
CLOSE AuditEventCursor;
DEALLOCATE AuditEventCursor;
END;
Когда я запускаю это вручную в SSMS, она работает просто отлично. Однако, когда я запускаю его как задание в агенте SQL Server, возникает следующая ошибка:
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION. [SQLSTATE 25000] (Error 3902).
В чем разница? Я использую ту же команду для выполнения: exec Purge_Audit
Спасибо!