2016-11-07 122 views
0

獲取以下錯誤:第21行是declare語句。 我無法弄清楚這一點。 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

顯然問題是我沒有列出第五列。謝謝。答案接受 – user127815

0

DB_Actions表中的Id列是標識列,不允許在觸發器中使用INSERT語句,因此您錯過了第五列,因此SQL Server試圖將GetDate()轉換爲Record_Id,從而導致錯誤。

相關問題