J'ai une procédure sql dans laquelle j'utilise un curseur, mais c'est vraiment très lent. Je cherche à améliorer la vitesse en utilisant un fonctionnement basé sur un ensemble ou de telles choses, mais je n'ai aucune idée comment l'appliquer à cette procédure spécifique:Amélioration pour ce curseur SQL - C'est vraiment lent!
declare @isMulti bit
declare @QuestionID int
declare db_cursor cursor FAST_FORWARD for
select distinct QuestionID
from tblQuestions (nolock)
where [email protected]
open db_cursor
fetch next from db_cursor into @QuestionID
while @@FETCH_STATUS = 0
begin
--check if @isMulti is true or not for the current question
if(@isMulti=1)
begin
update tblAnswers
set col1 = 1, col2 = 1, col3 = (select count(*) from tblAnswers where [email protected] and [email protected])
end
else if(@isMulti=0)
begin
update tblAnswers
set col1 = AnswerID, col2 = 1, col3 = (select LEN(count(*)) from tblAnswers where [email protected] and [email protected])
end
fetch next from db_cursor into @QuestionID
end
close db_cursor
deallocate db_cursor
Merci pour toute aide fournie!
Qu'essayez-vous de faire avec cette procédure? Peut-être qu'une simple requête de mise à jour peut suffire. – vdrmrt
Je vérifie si une question est multi ou non, puis je mets à jour ces questions en fonction de ces informations. La table des questions ne contient pas de colonne spécifiant si elle est multi ou non, je dois appeler une fonction sur l'identifiant de la question en cours dans le curseur pour vérifier. – Bob
Quelle est la déférence entre les mises à jour multi ou non? – vdrmrt