簡體   English   中英

SQL Server觸發器更新另一個表的列

[英]SQL Server trigger to update another table's column

我有兩個SQL Server表,稱為Table ATable B 我有一個應用程序,它在Table A插入一行,同時在Table B中插入三行。 正如您在下面的屏幕截圖中看到的,我們可以根據Table A中的ID列和Table B TransID列鏈接這些插入的記錄。

在表B上的數據插入期間,如果3個插入行中的任何行包含Printed列中名為Printed的值,我想將Table A的相關記錄的PrintStatus列更新為Printed

如何為此編寫SQL Server觸發器?

那么最好的解決方案是在您的代碼(app)中執行此操作,但如果沒有辦法,您可以像下面的觸發器示例一樣為表B編寫一個Trigger After Insert:

CREATE TRIGGER [dbo].[YourTrigger] ON [dbo].[TableB]
    AFTER INSERT
AS
DECLARE @id INT
BEGIN
SET NOCOUNT ON;
 SET @id = (SELECT DISTINCT ID FROM Inserted)
 IF EXISTS (SELECT * FROM Inserted WHERE Printed='Printed')   
  UPDATE TableA
  SET PrintStatus='Printed'
  WHERE ID = @id

END

願這對你有所幫助

它可能對你的問題是正確的:(不確定在100%)

CREATE TRIGGER TriggerTableB
ON TableB
AFTER INSERT
AS
    UPDATE TableA AS A
    SET PrintStatus = 'Printed'
    WHERE A.TranID = inserted.ID
        AND 'Printed' = (SELECT MAX(I.Printed)
                         FROM inserted AS I)

我建議查詢信息:

select a.*,
       (case when exists (select 1
                          from b
                          where b.id = a.tranid and b.printed = 'Printed'
                         )
             then 'Printed'
        end) as printstatus
from a;

這比編寫查詢更簡單,您可以將其包裝在視圖中。

從性能的角度來看, b(id, printed)上的索引應該能夠非常快 - 而且不會減慢插入速度。

如果要考慮insert s, update s和delete s,則觸發器可能非常復雜。 如果可能的話,我寧願避免這種並發症。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM