我有以下触发器,它不起作用,我不知道为什么。 插入REFERRALS表后触发器应该触发,并且我允许插入多行的可能性。 REFERRALS表中ORIGINAL_PATIENT_ID的值应设置为Inserted中的PATIENT_ID值,但它不起作用,即ORIGINAL_PATIENT_ID的值仍为NULL。
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[updateOSC]'))
DROP TRIGGER [dbo].[updateOSC]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[updateOSC]
ON [dbo].[REFERRALS]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON
IF (SELECT ORIGINAL_PATIENT_ID FROM Inserted) IS NULL
UPDATE [dbo].[REFERRALS]
SET ORIGINAL_PATIENT_ID = i.PATIENT_ID
FROM Inserted i
WHERE dbo.REFERRALS.PATIENT_ID = i.PATIENT_ID
END
GO
答案 0 :(得分:2)
如果您可以更新多行,那么IF (SELECT ORIGINAL_PATIENT_ID FROM Inserted) IS NULL
对我来说没有多大意义,因为这将返回多个您无法与NULL比较的值。
我认为您可以使用
获得所需的结果CREATE TRIGGER [dbo].[updateOSC]
ON [dbo].[REFERRALS]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON
UPDATE [dbo].[REFERRALS]
SET
ORIGINAL_PATIENT_ID = i.PATIENT_ID
FROM
Inserted i
WHERE
dbo.REFERRALS.PATIENT_ID = i.PATIENT_ID AND i.ORIGINAL_PATIENT_ID IS NULL
END
GO