Подтвердить что ты не робот

Ошибка SQL Server при обновлении - "Суровая ошибка в текущей команде"

Выполнение следующего запроса в SQL Server Management Studio дает ошибку ниже.

update table_name set is_active = 0 where id  = 3

Серьезная ошибка произошла в текущей команде. Результаты, если таковые имеются, должны быть отброшены.

  • Журналы были усечены
  • есть триггер обновления, но это не проблема.
  • количество транзакций равно нулю (@@trancount)

Я пробовал один и тот же оператор обновления на пару других таблиц в базе данных, и они работают нормально.

DBCC CHECKTABLE('table_name');

дает

DBCC results for 'table_name'.
There are 13 rows in 1 pages for object "table_name".
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
4b9b3361

Ответ 1

У меня была та же самая ошибка, и это было до поврежденного индекса. Повторная индексация таблицы устранила проблему.

Ответ 2

В моем случае я использовал SubQuery и имел ту же проблему. Я понял, что проблема связана с утечкой памяти.

Перезапуск службы MSSQL вызывает сброс ресурса tempDb и освобождает огромный объем памяти. так что это решило проблему.

Ответ 4

Выполнить DBCC CHECKTABLE('table_name');

Проверьте папку LOG, в которой установлен isntance (обычно \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG) для любого файла с именем 'SQLDUMP*'

Ответ 5

Другой сценарий, но та же ошибка: я получил эту ошибку, когда пытался вставить записи во временную таблицу с помощью хранимой процедуры. Оказалось, что существует несоответствие параметров. Я пытался вставить BIGINT в INT.

Кредит переходит к Вики Харпу: http://vickyharp.com/2012/03/troubleshooting-a-severe-error-occurred-on-the-current-command/

Ответ 6

В моем случае я использовал System.Threading.CancellationTokenSource для отмены SqlCommand, но не обрабатывал исключение с помощью catch (SqlException) { }

Ответ 7

Эта ошибка именно то, что она означает: случилось что-то плохое, что обычно не происходит.

В моем последнем случае РЕАЛЬНАЯ ошибка была:

Msg 9002, Level 17, State 2, Procedure MyProcedure, Line 2 [Batch Start Line 3]
The transaction log for database 'MyDb' is full due to 'LOG_BACKUP'.

Вот мой контрольный список вещей, которые можно попробовать, возможно, именно в этом порядке:

  1. Проверьте, нет ли у вас дискового пространства (это была моя настоящая проблема; наш NOC не уловил это)
  2. Убедитесь, что у вас мало памяти
  3. Проверьте, нет ли в журнале событий Windows каких-либо серьезных сбоев системы, таких как отказ жесткого диска
  4. Проверьте, не загружен ли небезопасный код с помощью расширенных процедур или небезопасных сборок SQLCLR, которые могут дестабилизировать процесс SQLServer.exe.
  5. Запустите CheckDB, чтобы увидеть, есть ли в вашей базе данных проблемы с повреждением. В очень большой базе данных, если эта хранимая процедура касается только подмножества таблиц, вы можете сэкономить время, наблюдая, к каким разделам (файловым группам) обращается хранимая процедура, и проверяя только те конкретные файловые группы.
    1. Я хотел бы сделать это для вашей базы данных и master db.

Ответ 8

Похоже, это происходит, когда существует общая проблема с вашим источником данных, который он не обрабатывает.

В моем случае я вставил кучу данных, индексы стали повреждены в таблице, их нужно было перестроить. Я нашел сценарий, чтобы восстановить их все, казалось, это исправить.