在触发器中,我可以确定列是否显式设置为值或未在更新语句中提及?

ber*_*d_k 6 trigger sql-server

给定一个列 col1 的表,如下所示:

create table MyTest (
    col1 int NULL,
    col2 decimal(7, 2) NULL
);

insert into MyTest values ( 1, 1.1);
Run Code Online (Sandbox Code Playgroud)

有没有办法让更新触发器决定执行以下哪个更新语句?

A:

update MyTest set col1 = 3;
Run Code Online (Sandbox Code Playgroud)

乙:

update MyTest set col1 = 3, col2 = 1.1;
Run Code Online (Sandbox Code Playgroud)

Mat*_*t M 7

如果这将是一个基于集合的触发器,或者如果您将其设计为一次只处理一行,这会有所不同,但这应该让您指向正确的方向。

IF
UPDATE(col1)
AND UPDATE(col2)
AND EXISTS(SELECT * FROM inserted WHERE col1 = 3 AND col2 = 1.1)
BEGIN
    DO STUFF
END

IF 
UPDATE(col1) 
AND EXISTS(SELECT * FROM inserted WHERE col1 = 3)
BEGIN
    DO STUFF
END
Run Code Online (Sandbox Code Playgroud)