2017-07-07 3 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 
関連する問題