2016-11-07 17 views
0

次のエラーが表示されます。21行目は宣言文です。 私はこれを理解できません。 Done_ONは明らかにdatetime型ですが、なぜコンパイラが不平を言いますか?おかげさまで データ型datetimeから数値への暗黙的な変換は許可されていません。

メッセージ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が本当に表の5番目の列であれば、このエラーが発生します。

トリガーを書くためのより適切な方法は、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

テーブルDB_ActionsのID列は、トリガ内のINSERT文では許可されていないため、5番目の列を欠いているため、SQL ServerはGetDate()をRecord_Idに変換しようとしました。

関連する問題