2010-06-24 3 views
0

J'ai essayé d'atteindre le déclencheur de suppression de niveau ligne à l'aide du curseur, mais lorsque vous essayez de supprimer une ligne de la table, cela a pris tellement de temps.Déclencheurs de niveau de ligne SQL Server

Je ne pouvais pas comprendre où exactement il est resté.

/****** Object: Trigger [delStudent] Script Date: 06/24/2010 12:33:33 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE TRIGGER [delStudent] 
    ON [dbo].[Student] 
    FOR DELETE 
AS 
DECLARE @Roll as varChar(50); 
DECLARE @Name as varChar(50); 
DECLARE @Age as int; 
DECLARE @UserName as varChar(50); 

SELECT @UserName=SYSTEM_USER; 

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; 
BEGIN TRANSACTION; 

declare CurD cursor for select roll, Sname, age from deleted  

open CurD 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    INSERT INTO [dbo].[Audit] 
      (roll,sname,age,userId) 
    VALUES 
      (@Roll,@Name,@Age,@UserName) 
END  
COMMIT TRANSACTION; 
Close CurD 
DEALLOCATE CurD 
+0

Quelle est la taille de votre DB et combien de lignes y a-t-il dans la table "Students"? – Samiksha

+2

Il n'y a aucune raison d'utiliser un curseur ici. Pourquoi en utilisez-vous un? – codingbadger

+0

Je doute que vos paramètres contiennent des valeurs. Ils ne sont jamais assignés. – user3208055

Répondre

3

Je pense que vous devriez transformer votre curseur dans une phrase de sélection d'insertion. Je ne suis pas sûr que cela va résoudre votre problème, mais c'est une bonne pratique de toute façon. Essayez d'éviter les curseurs, ce qui se traduira par de meilleures performances.

+3

+1: Complètement d'accord sur la suppression des curseurs. Il n'y a pas besoin de cela dans ce déclencheur. –

Questions connexes