0

次の SQL は、エラーなしでトリガーを作成します。SSMS でレコードを追加すると、トリガーが失敗し、次のメッセージが表示されます。

メッセージ 207、レベル 16、状態 1、行 4
列名 'CreatedDT' が無効です。

私は何を間違っていますか?これは SQL Server 2005 (v9.0.3080) です。ありがとう!

CREATE TRIGGER TRG_XXX_CreatedOn ON dbo.XXX
AFTER INSERT
AS
BEGIN
UPDATE dbo.XXX
SET dbo.XXX.CreatedDT = GETDATE()
WHERE dbo.XXX.Id IN (SELECT Id FROM Inserted)
END
GO
4

1 に答える 1

2

私にとってはうまくいきます。

テーブルに という列を含めることはできないと思いますCreatedDT。これを再確認してください (照合では大文字と小文字が区別される可能性があるため、名前の大文字と小文字を含めてください)。

これを設定するトリガーを使用する代わりに、INSERTとにかくその列にデフォルトの制約を設定することはできませんか? これは、トリガーを介して行うよりも効率的です。

動作するテストスクリプト

CREATE TABLE dbo.XXX
(
Id int,
CreatedDT DATETIME
)

GO

CREATE TRIGGER TRG_XXX_CreatedOn ON dbo.XXX
AFTER INSERT
AS
BEGIN
UPDATE dbo.XXX
SET dbo.XXX.CreatedDT = GETDATE()
WHERE dbo.XXX.Id IN (SELECT Id FROM Inserted)
END
GO

INSERT INTO dbo.XXX(Id) VALUES(1)

GO

SELECT * FROM dbo.XXX
于 2012-07-22T17:55:48.313 に答える