1


0

このトリガーをSQL Serverに書き込む方法は?

テーブル `my_table(id、x、y)`があるとします。 「x」がすでに「null」の場合、「y」列の更新と「non-null」値の設定を防ぐトリガーを作成します。 SQL Serverには更新前トリガーがありませんが、これを行うにはどうすればよいですか? この目的のために「代わりに」トリガーを使用できるようですが、古い値と現在の値を確認して、エラーを発生させるか、更新を正常に実行させるかを決定するにはどうすればよいですか?

例:

DBにこの行があると仮定しましょう。

1, null, null

その後、これは失敗するはずです(エラーを発生させます)

update my_table set y = 'blah' where id = 1;

しかし、これは成功するはずです:

update my_table set y = null where id = 1;

この例はあまり意味がありませんが、私が達成しようとしているものに似ています。

2 Answer


3


これは動作するはずですが、他にどのようなエッジ条件を処理する必要があるのか​​わかりません:

create table my_table (id int identity, x varchar(20), y varchar(20))
go
CREATE TRIGGER tgNotNullYonMyTable
ON my_table
FOR UPDATE
AS
IF UPDATE(y)
   BEGIN
       IF exists (
                  select 1
                    from deleted d
                         join inserted i on i.id = d.id
                   where (d.x is null or i.x is null)
                         and i.y is null
                 )
          BEGIN
              RAISERROR ('Leave Y alone if x is null.', 16, 1)
              rollback tran
          END
   END
go

insert my_table values (null,null)

go

update my_table set y = 'blah' where id = 1;
go
update my_table set y = null where id = 1;


-1


CREATE TRIGGER yxnull
ON mytable
FOR UPDATE
AS
IF UPDATE(y)
   BEGIN
       IF deleted.x is null and inserted.y is not null
          BEGIN
              RAISERROR ('Leave Y alone if x is null.', 16, 1)
              ROLLBACK TRANSACTION

          END
   END
go