Sql-Server

更新多行時觸發更新後

  • January 23, 2017

是否可以使用觸發器來更新多行?例如,我有一個應用程序將使用表值參數和 SQL 儲存過程將 15 到 20 行之間的任何位置轉儲到表中。一旦該數據被轉儲,我就需要一種方法(我正在考慮一個觸發器)來更新剩餘的“缺失”欄位。我認為這種方法可能有效(這是我更新的有效語法)

Create TRIGGER [dbo].[UpdateFields]
ON  [dbo].[TFData]
AFTER INSERT
AS 
BEGIN
SET NOCOUNT ON;
UPDATE a
Set 
a.DateOfInjury = b.InjurDate
,a.GameNum = c.GameNum
FROM [dbo].[InjuryReport] a
INNER JOIN [dbo].[GameStats] b
ON a.playnum = b.playnum
INNER JOIN [dbo].[GameSched] c
On b.gamenum = c.gamenum

我需要如何編寫這個觸發器來更新多行?我想我會以某種方式需要加入虛擬表,但我不確定。

你是對的,有一個名為“插入”的虛擬表是你需要加入的。此表包含已在原始表插入語句中插入的所有行。所以像:

CREATE TRIGGER [dbo].[UpdateFields]
ON  [dbo].[TFData]
AFTER INSERT
AS 
BEGIN
SET NOCOUNT ON;
UPDATE a
Set 
a.DateOfInjury = b.InjurDate
,a.GameNum = c.GameNum
FROM [dbo].[InjuryReport] a
INNER JOIN [dbo].[GameStats] b
ON a.playnum = b.playnum
INNER JOIN [dbo].[GameSched] c
On b.gamenum = c.gamenum
INNER JOIN inserted i
ON b.linkfield = i.linkfield

引用自:https://dba.stackexchange.com/questions/161997