#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, чтобы он также принял запрос.