[英]How to Use FIRE_TRIGGERS in insert sql statement
我正在嘗試將數據從表“ tb_A”復制到自身(使用不同的主鍵)。
當“ tb_A”表插入新記錄時,我編寫了一個觸發器,用一條記錄填充另一個表“ tb_B”。
我發表了以下聲明。
INSERT INTO [tb_A]
([NAME])
select top (20)[NAME] from [tb_A]
預計“ tb_B”中有20條新記錄。 但是我沒有。
無論如何,我看到在批量插入過程中正在使用FIRE_TRIGGERS來解決此問題。 有沒有辦法在inset語句上使用它? 請提供我的例子。
加揚
觸發代碼(從蓋安的評論復制到gbn的答案):
CREATE TRIGGER UpdatetbB ON [dbo].[tb_A] FOR INSERT
AS
DECLARE @AID as int
SELECT @AID = [ID] FROM inserted
INSERT INTO [tb_B]([IDA]) VALUES (@AID)
您的觸發器不能正常工作的原因是因為它的設計不當。 即使插入一百萬條記錄,也為每個插入觸發一次觸發。 您有一個觸發器,使該觸發器一次將擁有一個記錄。 每當您將插入或刪除的值形式設置為標量變量時,觸發器都是錯誤的,需要重寫。 嘗試這樣的事情。
CREATE TRIGGER UpdatetbB ON [dbo].[tb_A] FOR INSERT
AS
INSERT INTO [tb_B]([IDA])
SELECT [ID] FROM inserted
FIRE_TRIGGERS僅適用於BULK INSERT(和bcp),不適用於“標准” INSERT
我希望您的觸發器看起來像
CREATE TRIGGER TRG_tbA_I ON tb_A FOR INSERT
AS
SET NOCOUNT ON
INSERT tb_B (col1, col2, ...)
SELECT col1, col2, ... FROM INSERTED
GO
您可以使用特殊的INSERTED表來獲取tb_A中新行的列表,然后從該表中將其插入到tb_B中。 這適用於多個行
如果您添加觸發代碼,那么我們可以解釋出了什么問題。
編輯:您的觸發器將只從INSERTED中讀取一行(任何行,沒有特定的順序)。 它沒有像我的粗略示例那樣設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.