Ошибка таблицы обновления SQL: выполнение DBCC завершено. Если DBCC напечатал сообщения об ошибках, обратитесь к системному администратору

#sql #sql-server #sql-server-2012 #dbcc

#sql #sql-server #sql-server-2012 #dbcc

Вопрос:

 update Calls 
set 
Call_Closed = GETDATE()
where CallId = 4266576;
  

У меня есть таблица с именем calls. Всякий раз, когда я пытаюсь обновить какой-либо столбец в этой таблице, он выдает ошибку. Я вошел в систему с учетной записью «sa» на сервере, и это учетная запись администратора. Указанный выше столбец datetype является datetime. Кроме того, обновление любого столбца в таблице приводит к приведенной ниже ошибке.

Сведения об ошибке

 *String or binary data would be truncated.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
The statement has been terminated.*
  

Запуск в таблице

 CREATE TRIGGER tgrMonitorDoneWho ON Calls
FOR INSERT,UPDATE
AS  
begin   

    DECLARE @ExecStr varchar(50), @Qry nvarchar(255)

    CREATE TABLE #inputbuffer 
    (
      EventType nvarchar(30), 
      Parameters int, 
      EventInfo nvarchar(255)
    )

    SET @ExecStr = 'DBCC INPUTBUFFER('   STR(@@SPID)   ')'

    INSERT INTO #inputbuffer 
    EXEC (@ExecStr)

    SET @Qry = (SELECT EventInfo FROM #inputbuffer)


    INSERT INTO tblDoneWhoMonitor(CallId,DoneWho,Operation,Query)
    SELECT  case
            when inserted.CallId is null then deleted.CallId
            when deleted.CallId is null then inserted.CallId
            else deleted.CallId end,
            case
            when inserted.CallId is null then deleted.DoneWho
            when deleted.CallId is null then inserted.DoneWho
            else deleted.DoneWho end, 
            case
            when inserted.CallId is null then 'DELETE'
            when deleted.CallId is null then 'INSERT'
            else  'UPDATE' end,
            @Qry
    FROM inserted
    FULL OUTER JOIN deleted
    ON inserted.CallId = deleted.CallId
end
  

Комментарии:

1. какой тип данных Call_Closed

2. Datetime выдает ошибку в каждом столбце, если я пытаюсь обновить. Ничего, связанного с типом столбца

3. Пожалуйста, добавьте к вашему вопросу определение таблицы для Calls .

4. А как насчет типа данных CallId ? вы могли бы попробовать where CallId = '4266576'

5. Есть ли какой-либо триггер в этой таблице, который срабатывает, что могло бы вызвать это?

Ответ №1:

Столбец EventInfo слишком мал. Измените его на max. Вам также нужно будет изменить @Qry на nvarchar (max).

 CREATE TABLE #inputbuffer 
    (
      EventType nvarchar(30), 
      Parameters int, 
      EventInfo nvarchar(max)
    )

@Qry nvarchar(max)
  

И, в свою очередь, вам нужно будет изменить определение таблицы для tblDoneWhoMonitor, чтобы он также принял запрос.