【发布时间】:2019-08-09 11:56:17
【问题描述】:
我有一个表 DISPENSE_DOSAGES 并在此表上创建了一个 AFTER INSERT 触发器。在该触发器中,我正在尝试更新另一个表DISPENSE_DRUGS,该表具有与INSERTED 表匹配的行。当一行插入DISPENSE_DOSAGES 时,触发器成功触发,但它不更新DISPENSE_DRUGS 中的行。我知道这条线正在产生问题。
WHERE [DISPENSE_ID] IN (SELECT [DISPENSE_ID] FROM INSERTED)
上述代码中的(SELECT [DISPENSE_ID] FROM INSERTED) 行正在生成问题。
我知道触发器需要批量插入并尝试了游标解决方案,但它对我不起作用。
这是触发器的代码
CREATE TRIGGER [dbo].[TRG_DISPENSE_DOSAGES]
ON [dbo].[DISPENSE_DOSAGES]
AFTER INSERT
AS
BEGIN
IF (EXISTS (SELECT [DISPENSE_ID]
FROM INSERTED
WHERE [DISPENSE_ID] IN (SELECT [DISPENSE_ID]
FROM [DISPENSE_DOSAGES]
WHERE [SEPARATE_ITEM] = 1)))
BEGIN
UPDATE [dbo].[DISPENSE_DRUGS]
SET QUANTITY_DISPENSED = 0,
QUANTITY_OWED = QUANTITY_PRESCRIBED
WHERE [DISPENSE_ID] IN (SELECT [DISPENSE_ID] FROM INSERTED) --This line generates issue
END
END
【问题讨论】:
-
您使用的是哪个 dbms? (该代码是特定于产品的。)
-
我正在使用 SQL Server
-
触发器正确触发,如果条件为真。但更新语句不起作用。
-
您的描述与代码不匹配 - 您说您在 DISPENSE_DOSAGES 上有触发器,但代码是 DISPENSE_DRUGS 上的触发器?
-
错误信息或问题是什么?为什么你知道
WHERE [DISPENSE_ID] IN (SELECT [DISPENSE_ID] FROM INSERTED)导致了这个问题?
标签: sql-server tsql database-trigger