うまく動かないデータベース トリガーについて助けが必要です。開示:私はDBAではなく、専門知識を主張していませんが、これを成し遂げる任務を負っています..
そうは言っても、問題のステートメントは次のとおりです。
更新/挿入/削除を追跡するいくつかのテーブルを含むデータベースがあります。トリガーは、いくつかの列の「前」と「後」の値をキャッチし、両方をいくつかの追加情報 (後述) とともに取得して、versioncontrol
テーブルに追加する必要があります。
さまざまなサイトで入手できるチュートリアルやその他の情報に基づいて、機能すると思われるものをまとめましたが、トリガーを作成しようとして何をしても、常にエラーがスローされます。
メッセージ 311、レベル 16、状態 1、プロシージャ tr_taskconstructs_U、38 行目
'挿入' および '削除' テーブルで text、ntext、または image 列を使用することはできません。
トリガーを適用するテーブルの列レイアウトは非常に単純です。
ResourceID (PK, nvarchar(38))
AML (ntext, null)
次のように、列への変更をキャッチし、その変更をテーブルに挿入したいと考えてAML
います。
id (int, not null),
ResourceID (nvarchar(38)),
TableName (nvarchar(50)),
DateTime (datetime),
Type (varchar(20)),
Before (ntext),
After (ntext)
私のコードは次のとおりです。
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
上記のエラーで常に失敗します。変数のデータ型などを変更してみましたが、同じ結果でした。ほとんどすべてをコメントアウトしようとしましたが、同じエラーもあります。明らかに何かが欠けていますが、何がわからないのですか。
どんな助けでも大歓迎です。