【问题标题】:UPDATE after INSERT for potentially multiple rows - not working在插入后更新可能多行 - 不工作
【发布时间】:2015-08-26 22:56:15
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    如果您可以更新多行,那么 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 2019-08-12
      • 1970-01-01
      相关资源
      最近更新 更多