使用条件更新触发器
update trigger with a condition
我有一个更新触发器,它会在字段 'urejeno' 被修改时运行。
USE [MYDATABASE]
GO
create trigger trg_MyTrigger on dbo.mytable
after update
as
if @@ROWCOUNT = 0
return
set nocount on
if UPDATE (UREJENO)
update mytable
set UREJENO_KDAJ = getdate(),
UREDIL_KDO = USER_NAME()
from mytable S
inner join Inserted I on S.TW_ID = I.TW_ID
但是我想添加一个条件,这样 if 'urejeno' = True
触发器执行上述操作,但如果条件为 'False'
我想将提到的字段设置为 NULL。
我必须改变什么?
您可以在条件的 else 部分添加另一个更新查询,或者您可以重写您的更新并直接使用位值作为条件。
这应该有效(如果我理解你的意图正确的话)。
CREATE TRIGGER trg_MyTrigger ON dbo.mytable
AFTER UPDATE
AS
IF @@ROWCOUNT = 0
RETURN
SET NOCOUNT ON
IF UPDATE(UREJENO)
BEGIN
UPDATE mytable
SET
UREJENO_KDAJ = CASE WHEN I.UREJENO = 1 THEN GETDATE() ELSE NULL END,
UREDIL_KDO = CASE WHEN I.UREJENO = 1 THEN USER_NAME() ELSE NULL END
FROM mytable S
INNER JOIN Inserted I on S.TW_ID = I.TW_ID
END
GO
如果 UREJENO 更新为 0(假),这会将两个字段设置为空,但 UREJENO 设置为 1(真),然后将使用 getdate() 和 user_name()。
我有一个更新触发器,它会在字段 'urejeno' 被修改时运行。
USE [MYDATABASE]
GO
create trigger trg_MyTrigger on dbo.mytable
after update
as
if @@ROWCOUNT = 0
return
set nocount on
if UPDATE (UREJENO)
update mytable
set UREJENO_KDAJ = getdate(),
UREDIL_KDO = USER_NAME()
from mytable S
inner join Inserted I on S.TW_ID = I.TW_ID
但是我想添加一个条件,这样 if 'urejeno' = True 触发器执行上述操作,但如果条件为 'False' 我想将提到的字段设置为 NULL。
我必须改变什么?
您可以在条件的 else 部分添加另一个更新查询,或者您可以重写您的更新并直接使用位值作为条件。
这应该有效(如果我理解你的意图正确的话)。
CREATE TRIGGER trg_MyTrigger ON dbo.mytable
AFTER UPDATE
AS
IF @@ROWCOUNT = 0
RETURN
SET NOCOUNT ON
IF UPDATE(UREJENO)
BEGIN
UPDATE mytable
SET
UREJENO_KDAJ = CASE WHEN I.UREJENO = 1 THEN GETDATE() ELSE NULL END,
UREDIL_KDO = CASE WHEN I.UREJENO = 1 THEN USER_NAME() ELSE NULL END
FROM mytable S
INNER JOIN Inserted I on S.TW_ID = I.TW_ID
END
GO
如果 UREJENO 更新为 0(假),这会将两个字段设置为空,但 UREJENO 设置为 1(真),然后将使用 getdate() 和 user_name()。