1
EquipmentStatKeyが何かから設定値に変化したときに変数を更新または連結するトリガーを作成しようとしていて、EquipmentStatKeyとUserDef2の両方が変更されたときに値を変更します。特定のタプルが更新されたときに実行されるトリガー
私はSQLに非常に慣れていて、何が間違っているのか分かりません。私が与えたエラーコードはSQL80001とSQL46010ですが、多分もっと複雑な構文/ロジックエラーがあると思います。
GO
CREATE OR REPLACE TRIGGER equipStatTrig
AFTER UPDATE OF EquipmentStatKey ON dbo.Equipment
FOR EACH ROW
AS
DECLARE @statVar INT, @departmentVar INT, @receiveDateVar NVARCHAR (30), @shipDateVar NVARCHAR (30), @rentDateVar NVARCHAR (30), @sellDateVar NVARCHAR (30), @notesVar NTEXT
SELECT @statVar = EquipmentStatKey
SELECT @departmentVar = DeptOwnerKey
SELECT @receiveDateVar = UserDef1
SELECT @shipDateVar = UserDef2
SELECT @rentDateVar = UserDef3
SELECT @sellDateVar = UserDef6
SELECT @notesVar = Notes
/* execute if EquipmentStatKey changed from something to 6, 1, 8, or 32 */
IF @statVar = 06 OR @statVar = 01 OR @statVar = 08 OR @statVar = 32
BEGIN
/*should read as "[previous note] [status] [department] [date]" */
SET @notesVar += ' ' + @statVar + ' ' + @departmentVar + ' ' + CurrentDate
SELECT LEN(@notesVar) AS Notes
END
/* execute if EquipmentStatKey changed from something to 3 or 2 */
ELSE IF @statVar = 03 OR @statVar = 02
BEGIN
SET @shipDateVar = NULL
END
/* execute if EquipmentStatKey changed from something to 6 */
ELSE IF @statVar = 06
BEGIN
SET @shipDateVar = CurrentDate
SET @sellDateVar = CurrentDate
END
/* execute if EquipmentStatKey changed from something to 8 or 1, && UserDef2 changed */
ELSE IF @statVar = 08 OR @statVar = 01 AND :OLD.UserDef2 != :NEW.UserDef2
BEGIN
SET @rentDateVar = @shipDateVar
END
GO
@Joshua Gregoryのスタックオーバーフローへようこそ。 SQL Serverを使用していますか? [windows-server-2016]ではなく、そのタグを付けるつもりでしたか?正確なタグを持つことで、これらのトピックで最も経験豊富なユーザーがあなたの質問を見つけるのに役立ちます。 – Degan
これは間違いなくSQLサーバーにあると思われましたが、私が作ったときに誤ってオラクルを参照していたかもしれません...はい、私は知っています。 ( –
)SQL Serverでは、行ごとにROW TRIGGERSをサポートしていませんが、STATEMENT TRIGGERSのみがサポートされています。INSERTEDおよびDELTED仮想テーブルの複数の行を処理する必要があります(https://docs.microsoft.com/en-us/) sql/t-sql/statements/create-trigger-transact-sql –