2017-07-07 51 views
0

我有一個觸發器。當我刪除我的表中的某些東西時,我想在其他名爲Archive的表中創建一行,並將其刪除。一切正常。問題是當我在同一時間刪除多個行。它僅存儲表格存檔中的第一行。我想創建一個循環,但我如何分開他們在子查詢來選擇每一行。我如何解決這個問題?多個刪除SQL服務器中的單獨行

ALTER TRIGGER [dbo].[trigArhiva] 
    ON [dbo].[student] 
    AFTER DELETE 
AS 
SET NOCOUNT ON; 
BEGIN 
    declare @nume varchar(45); 
    declare @anStudiu int; 
    declare @prenume varchar(45); 
    declare @CNP char(13); 
    declare @grupa int; 
    declare @idFacult int; 
    declare @rowss int; 
    declare @i int; 
    select @rowss = count(*) from DELETED; 
    set @i = 1; 

    while (@i <= @rowss) 
    begin 

    select @nume = nume from DELETED; 
    select @anStudiu = anStudiu from DELETED; 
    select @prenume = prenume from DELETED; 
    select @CNP = CNP from DELETED; 
    select @grupa = idGrupa from DELETED; 
    select @idFacult = idFacult from DELETED; 

    insert into arhivaStud(nume, prenume, CNP, grupa, idFacult, anStudiu) values (@nume, @prenume, @CNP, @grupa, @idFacult, @anStudiu); 

    set @i = @i+1; 

    end 
END 
+0

顯示觸發代碼..我相信你的代碼中有這樣的東西。 'Select @ var1 = col .. from Deleted'並使用該變量插入我剛剛編輯的存檔表 –

+0

。謝謝 – StringDotZ

+0

您需要批量執行此操作。你可以插入到新表中,你從'deleted'中選擇的所有東西。 –

回答

3

我認爲你應該使用這樣的事情(刪除是其召回觸發器的操作過程中刪除所有記錄的「內部」表示):

ALTER TRIGGER [dbo].[trigArhiva] 
    ON [dbo].[student] 
    AFTER DELETE 
AS 
SET NOCOUNT ON; 
BEGIN 
INSERT INTO arhivaStud(nume, prenume, CNP, grupa, idFacult, anStudiu) 
SELECT nume, prenume, CNP, idgrupa, idFacult, anStudiu FROM deleted 
END