2015-05-26 5 views
0

Я пытаюсь вставить строку в новую таблицу, когда строка удалена из исходной таблицы, но я продолжаю получать следующую ошибку при запуске удаления в записи.SQL Server insert after delete Ошибка триггера

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

Msg 8152, Level 16, State 13, процедура DeleteEmpTR, линия 5 Строка или двоичные данные будут усечены. Заявление было прекращено.

SELECT * INTO dbo.DeletedEmp 
FROM Original.Employees 
WHERE 1=2; 

CREATE TRIGGER dbo.DeleteEmpTR ON dbo.Employees 
AFTER DELETE 
AS 

INSERT INTO dbo.DeletedEmp 
SELECT d.col1, d.col2, ... 
FROM deleted d 
WHERE empid not in (SELECT empid FROM inserted); 

/* 
--tests 
DELETE FROM dbo.Employees 
WHERE empid = 9 
SELECT * FROM dbo.DeletedEmp; 
*/ 
+2

Казалось бы, 'Original.Employees' и' dbo.Employees' не имеют одинаковых определений столбцов. –

+0

** никогда никогда ** использовать 'select *'. Всегда явно указывайте столбцы. Сделайте это, и ваш код, вероятно, сработает –

+0

Примечание: если ваш триггер действительно выглядит так, как вы показали (это просто триггер 'AFTER DELETE'), то проверка' вставлен' не имеет смысла. Он всегда * будет пустым для триггера удаления. –

ответ

0
  • Вы должны проверить оба ваших таблиц Employees и DeletedEmp столбцов имеют тот же столбец тип данных. (определение данных)
  • Проверьте, что любые столбцы с char and varchar имеют одинаковую длину. Char(n) и VarChar(n), где n - длина строки.

Ошибка String or binary data would be truncated, как правило, когда длина строки, которая будет вставлено больше, чем столбец таблицы цели может вместить.

Смежные вопросы