[英]SQL Server trigger to update another table's column
我有兩個SQL Server表,稱為Table A
和Table 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.