Эта ошибка означает, что вы пытаетесь выполнить зарегистрированную операцию во время обреченной транзакции. Это может произойти только в блоке BEGIN CATCH, если вы игнорируете значение XACT_STATE , равное -1:
У текущего запроса есть активный пользователь
транзакция, но произошла ошибка
что привело к транзакции
классифицируется как uncommittable
сделка. Запрос не может быть зафиксирован
сделка или откат к
Точка сохранения; он может запросить только полный
откат сделки.
запрос не может выполнить запись
операции, пока он не откатит
сделка. Запрос может только
выполнять операции чтения, пока он не катится
вернуть сделку После
транзакция была отменена,
Запрос может выполнять как чтение, так и
Операции записи и могут начать новый
сделка.
Тот факт, что ваша попытка сделать это просто указывает на проблему кода с обработкой исключений (другими словами, ваша процедура глючит). Недавно я написал в блоге шаблон для процедур, которые используют BEGIN TRY / BEGIN CATCH , и вы можете использовать его в качестве отправной точки для исправления вашей процедуры. У Эрланда Соммарскога есть хорошо известная статья об обработке ошибок Transact-SQL , но она не охватывает слишком глубоко BEGIN TRY / BEGIN CATCH.
При правильной обработке ошибок вы можете узнать исходную ошибку, которая возникает и в первую очередь приводит к выполнению блока CATCH. Поскольку вы упоминаете, что выполнение процедуры вручную не вызывает проблем, проблема, скорее всего, заключается в различиях контекста между заданием агента SQL и выполнением вручную. Я не могу диагностировать проблему без каких-либо данных, но мое предположение о наиболее вероятной причине заключается в разнице в контексте безопасности (т. Е. Для входа в систему агента не хватает некоторых прав, которыми обладает ваш собственный вход).