La requête SQL prend des heures

Je dois déplacer un programme C # Forms d'un ancien server à un nouveau. Et cela semble fonctionner mais maintenant, bien que le server ait un meilleur matériel, les requêtes SQL tournent comme pour toujours. Je ne suis pas tellement en SQL mais cette requête suivante semble être la plus lente quand je débogue le code. Peut-être que quelqu'un a une solution ou une idée de pourquoi c'est si boiteux …

C'est le SQL de base:

DECLARE @id nvarchar(255); DECLARE @tag nvarchar(255); DECLARE curAuftr CURSOR FORWARD_ONLY FOR SELECT AUSF_TAG, SAP_ID FROM TabellenName OPEN curAuftr FETCH NEXT FROM curAuftr INTO @tag, @id WHILE (@@FETCH_STATUS <> -1) BEGIN UPDATE TabellenName SET SummePersonal = (select Sum(Stunden) from LStunden WHERE convert(varchar(10), Datum, 104) LIKE @tag AND KFZInnenauftrag_Nummer LIKE @id AND NOT ( Mitarbeiter_Kostenstelle LIKE (PC + '%') AND Mitarbeiter_Kostenstelle LIKE '%055' AND PC LIKE 'U%' ) ) WHERE AUSF_TAG = @tag AND SAP_ID = @id FETCH NEXT FROM curAuftr INTO @tag, @id END CLOSE curAuftr DEALLOCATE curAuftr 

Ce que vous essayez est d'avoir une requête en tant que source pour l'instruction update où. C'est la même table, je ne sais pas pourquoi tu fais ça. Cela vous force le slider. Les mises à jour peuvent mettre à jour plusieurs lignes. Réduisez le problème à la command de mise à jour uniquement.

La sous-requête qui crée la sum est exécutée pour chaque ligne. C'est une partie qui tue le time. Créez une sous-requête qui crée les sums et joignez le résultat à la mise à jour.

La conversion Date to Ssortingng est également très lente. Comparez-la avec la command like.

Exemple de code non testé, car vous n'avez fourni aucun exemple de table:

 UPDATE TabellenName SET SummePersonal = StundenSumme from TabellenName join ( select Sum(Stunden) as Stunden, convert(varchar(10), Datum, 104) as TAG, KFZInnenauftrag_Nummer as ID from LStunden WHERE NOT ( Mitarbeiter_Kostenstelle LIKE (PC + '%') AND Mitarbeiter_Kostenstelle LIKE '%055' AND PC LIKE 'U%' ) group by convert(varchar(10), Datum, 104), KFZInnenauftrag_Nummer ) summen on TabellenName.AUSF_TAG=summen.tag and TabellenName.SAP_ID=summen.id) 

Essayez d'utiliser le studio de gestion et affichez le plan de requête pour find les goulots de la bouteille.