簡體   English   中英

如何在插入SQL語句中使用FIRE_TRIGGERS

[英]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.

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