SQL Server 2008触发器错误

0 sql sql-server triggers sql-server-2008

我需要一些数据库触发器的帮助,我无法正常工作.披露:我不是一名DBA,也没有任何专业知识,但我的任务是完成这项任务.

也就是说,这是问题陈述:

我有一个包含几个表的数据库,我们想跟踪更新/插入/删除.触发器应该捕获某些列的"之前"和"之后"值,同时获取一些附加信息(如下所述)并将它们添加到versioncontrol表中.

我已根据各种网站上提供的教程和其他信息整理了我认为应该工作的内容,但无论我在尝试创建触发器时做什么,它总是会抛出错误:

消息311,级别16,状态1,过程tr_taskconstructs_U,第38行
不能在'inserted'和'deleted'表中使用text,ntext或image列.

我正在应用触发器的表的列布局非常简单:

ResourceID (PK, nvarchar(38))
AML (ntext, null)
Run Code Online (Sandbox Code Playgroud)

我想捕获对AML列的更改并将更改插入表中,如下所示:

id (int, not null),
ResourceID (nvarchar(38)),
TableName (nvarchar(50)),
DateTime (datetime),
Type (varchar(20)),
Before (ntext),
After (ntext)
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

CREATE TRIGGER tr_taskconstructs_U ON taskconstructs AFTER UPDATE
AS 
BEGIN

SET NOCOUNT ON;

    DECLARE @before nvarchar(max), 
        @after nvarchar(max), 
        @resource nvarchar(50)

IF UPDATE(AML)
BEGIN
    SELECT @before = d.AML,
            @after = i.AML,
            @resource = d.ResourceID
    FROM inserted i
        INNER JOIN deleted d on d.ResourceID = i.ResourceID

    INSERT INTO versioncontrol
    VALUES (@resource, 'taskconstructs', GetDate(), 'Update', @before, @after)

END

END
GO
Run Code Online (Sandbox Code Playgroud)

它始终因上述错误而失败.我尝试使用相同的结果更改变量的数据类型等.我已经尝试评论几乎所有内容,它也有同样的错误.我显然错过了一些东西,但我无法弄清楚是什么.

任何帮助,将不胜感激.

SQL*_*ace 5

更改表以使用nvarchar(max)数据类型.无论如何都要弃用Ntext,不应该继续使用