Sql server 不允许将数据类型datetime隐式转换为数字

Sql server 不允许将数据类型datetime隐式转换为数字,sql-server,datetime,triggers,insert,Sql Server,Datetime,Triggers,Insert,获取以下错误:第21行是declare语句。 我想不出来。Done_ON显然是datetime类型,为什么编译器会抱怨? 谢谢 Msg 257,第16级,状态3,程序插入员工详细信息,第21行 不允许将数据类型datetime隐式转换为数字。使用CONVERT函数运行此查询 Use [StacysDB]; Go --CREATE TABLE DB_Actions --( --Id numeric(5,0) IDENTITY(1,1) PRIMARY KEY, --Table_Name var

获取以下错误:第21行是declare语句。 我想不出来。Done_ON显然是datetime类型,为什么编译器会抱怨? 谢谢

Msg 257,第16级,状态3,程序插入员工详细信息,第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()
)
您应该始终列出插入的列:

INSERT INTO DB_Actions(id, table_name, action_name, user_name, done_on)
    VALUES(@id,
            'Employee_Details',
            'INSERT',
            @name,
            getdate()
    );
您缺少
记录\u Id
。不过,我不确定它为什么会产生这个错误。如果
Record\u Id
确实是表中的第5列,则会出现此错误

编写触发器的更合适方法是假设插入的
可以有多行:

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;

当您同时插入多行时,这至少不会在某些时候产生错误。

表DB\u Actions中的Id列是标识列,触发器中的insert语句不允许使用,因此您错过了第五列,因此SQL Server尝试将GetDate()转换为记录\u Id,因此导致了错误。

用您正在使用的数据库标记您的问题。显然,问题在于我没有列出第5列。谢谢接受答复