INSERT之后更新可能有多行 - 不工作

时间:2015-06-11 09:58:24

标签: sql tsql sql-server-2005 relational-database

我有以下触发器,它不起作用,我不知道为什么。 插入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

1 个答案:

答案 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