espérons que tout va bien. J'ai un problème dans la requête du serveur sql.mise à jour en utilisant le curseur
Je souhaite mettre à jour un enregistrement dans un tableau comportant 534 000 lignes. si je crée une boucle while pour mettre à jour tous les enregistrements, cela prend du temps.
alors je devrais créer un curseur pour l'enregistrement de mise à jour. Après cela, je crée un curseur pour la mise à jour en utilisant Fetch. ce curseur complète le processus de mise à jour rapidement dans 10.000 lignes mais quand j'utilise la table qui a plus de 30.000 lignes cela prend 5 minutes pour exécuter la requête. Je ne sais pas quel est le problème.
son mon code
DECLARE @RNo INT --Declaring the Variable @id
DECLARE @id INT --Declaring the Variable @id
set @RNo=1
DECLARE @MyCursor CURSOR -- Declaring the Cursor
SET @MyCursor = CURSOR --Assigning the cursor
FOR
SELECT Col1 FROM MyTable --Query related to Cursor
for update of Col2
OPEN @MyCursor -- Opening the Created cursor
FETCH NEXT FROM @MyCursor --Retrieving the record one by one
INTO @id --Assigning the value in declared Variable
WHILE @@FETCH_STATUS = 0
BEGIN
update MyTable
set [email protected]
where current of @MyCursor
set @[email protected]+1
print @id
FETCH NEXT
FROM @MyCursor INTO @id
END
CLOSE @MyCursor -- Closing the Cursor
DEALLOCATE @MyCursor -- Deallocating the Cursor Memory
Note: Ma Recherche exécuter avec des données correctes mais le problème est qu'il faut 5 minuts je veux seulement exécuter cette requête dans les 10 secondes.
Merci à l'avance
** GET RID du curseur! ** C'est votre problème .... ** RBAR ** traitement - ** row-by-agonizing-row **. Fine en C#, horriblement mauvaise en SQL ..... Ce n'est pas du tout nécessaire, et c'est juste un ralentissement inutile ... juste une seule instruction 'UPDATE' fonctionnerait, je crois ... –