2016-11-07 1 views
0

Получение следующей ошибки: Строка 21 - инструкция объявления. Я не могу понять это. Done_ON явно имеет тип datetime, почему компилятор жалуется? Спасибо.Неявное преобразование из типа данных datetime в числовое не допускается

Msg 257, уровень 16, состояние 3, процедура insert_employee_details, строка 21 Неявное преобразование из типа данных datetime в числовое значение не допускается. Используйте функцию CONVERT для запуска этого запроса.

Use [StacysDB]; 
Go 


--CREATE TABLE DB_Actions 
--(
--Id numeric(5,0) IDENTITY(1,1) PRIMARY KEY, 
--Table_Name varchar(20), 
--Action_Name varchar(10), 
--User_Name varchar(50), 
--Done_ON datetime, 
--Record_Id numeric(5,0) 
--); 


--INSERT TRIGGER 
CREATE TRIGGER insert_employee_details 
ON Employee_Details 
FOR INSERT 
AS 
DECLARE @id int, @name varchar(20) 
SELECT @id = Emp_Id, @name = Emp_First_Name FROM inserted 
INSERT INTO DB_Actions 
VALUES(@id, 
     'Employee_Details', 
     'INSERT', 
     @name, 
     getdate() 
) 
+0

Пометьте свой вопрос в базе данных, которую вы используете. –

ответ

2

Вы должны всегда список столбцов для insert:

INSERT INTO DB_Actions(id, table_name, action_name, user_name, done_on) 
    VALUES(@id, 
      'Employee_Details', 
      'INSERT', 
      @name, 
      getdate() 
    ); 

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

Более правильный способ, чтобы написать триггер предположить, что inserted может иметь несколько строк:

INSERT INTO DB_Actions(id, table_name, action_name, user_name, done_on) 
    SELECT Emp_Id, 'Employee_Details', 'INSERT', Emp_First_Name, getdate() 
    FROM inserted; 

Это, по крайней мере, не будет генерировать ошибку, когда-то при вставке нескольких строк одновременно.

+0

, по-видимому, проблема в том, что я не перечислил 5-ю колонку. Благодарю. ответ принят – user127815

0

Столбец Id в таблице DB_Actions - это столбец идентификатора, не разрешенный для оператора INSERT в триггере, поэтому вы пропустите пятый столбец, поэтому SQL Server попытался преобразовать GetDate() в Record_Id, что вызвало ошибку.

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

  • Нет связанных вопросов^_^