SQL触发器里update(字段名)没有变化怎么写语句
ALTERTRIGGER[dbo].[updtenum]ON[dbo].[rdrecords10]FORinsert,delete,UPDATEASifupdate(iQ...
ALTER TRIGGER [dbo].[updtenum] ON [dbo].[rdrecords10]
FOR insert,delete,UPDATE
AS
if update( iQuantity) and not(update(iNum))---如果iQuantity有变化并且iNum没有变化跳出触发器
begin
return
end
else
if update(iNum) ----如果iNum有变化更新iQuantity的值
begin
update dbo.rdrecords10 set iQuantity=round(rdrecords10.iNum*(select cInvDefine11 from inventory where cInvCode=rdrecords10.cInvCode),2)
from rdrecords10 inner join inserted on rdrecords10.AutoID=Inserted.AutoID
end
现在是不论iNum有没有变化都会更新iQuantity的值,那里写的不对 展开
FOR insert,delete,UPDATE
AS
if update( iQuantity) and not(update(iNum))---如果iQuantity有变化并且iNum没有变化跳出触发器
begin
return
end
else
if update(iNum) ----如果iNum有变化更新iQuantity的值
begin
update dbo.rdrecords10 set iQuantity=round(rdrecords10.iNum*(select cInvDefine11 from inventory where cInvCode=rdrecords10.cInvCode),2)
from rdrecords10 inner join inserted on rdrecords10.AutoID=Inserted.AutoID
end
现在是不论iNum有没有变化都会更新iQuantity的值,那里写的不对 展开
1个回答
展开全部
要比较 Deleted 和 Inserted 2表中的值是否一致 ,才能确定字段是否被修改了。
如果字段A修改前是AAA修改后也是AAA,那也会触发 if update(字段A) 成立 。
如果字段A修改前是AAA修改后也是AAA,那也会触发 if update(字段A) 成立 。
追问
能不能给修改一下
追答
一个例子
IF UPDATE(iNum)
BEGIN
IF EXISTS ( SELECT 1
FROM Inserted N
WHERE EXISTS ( SELECT 1
FROM Deleted O
WHERE (N.ID=O.ID) AND
(N.iNum<>O.iNum) ) )
BEGIN
//iNum值已经更改
END;
END;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询