SQL Server:触发错误

use*_*833 0 t-sql sql-server triggers

有人可以解决这个问题:

CREATE TRIGGER tr_admin_ForInsert
ON admin
FOR INSERT 
AS 
BEGIN 
    DECLARE adminID INT
    SELECT adminID = adminID from inserted

    insert into adminAudit 
    Values ('New Admin with ID = ' + Cast (ID as NVARCHAR(5)) + ' is added at ' + cast(Getdate() as NVARCHAR (20)))
END
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

消息155,级别15,状态2,过程tr_admin_ForInsert,第7行
'INT'不是可识别的CURSOR选项.

  • INT 加下划线并说''不是公认的CURSOR选项'
  • SELECT加下划线并说'SELECT'附近的语法不正确.期待CURSOR或ID

这是我为admin添加的表格:

USE [zachtravelagency]
CREATE TABLE admin
(
        [adminID] INTEGER NOT NULL IDENTITY (1,1) PRIMARY KEY, 
        [firstname] NVARCHAR(30) NOT NULL,
        [surname] NVARCHAR(50) NOT NULL,
        [username] NVARCHAR(30) NOT NULL, 
        [password] NVARCHAR(30) NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)

这是我为adminAudit插入的表:

CREATE table adminAudit 
(
      [adminAuditID] INTEGER NOT NULL IDENTITY (1,1) PRIMARY KEY, 
      [AuditData] NVARCHAR(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

谢谢.

Gor*_*off 6

根本不要使用变量.用途insert . . . select:

BEGIN 

    insert into adminAudit 
        select 'New Admin with ID = ' + Cast (adminid as NVARCHAR(5)) + ' is added at ' + cast(Getdate() as NVARCHAR(20))
        from inserted;
END
Run Code Online (Sandbox Code Playgroud)

我还建议如下:

  • 使用,convert()这样您就可以控制日期格式.
  • 更好的是,在Audit表中使用单独的列来表示您正在执行的id,日期和操作.将所有内容放入字符串中似乎效率低下且难以进行调查.