{SQL Server} c'est koi un curseur
lolipop18
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
OlivrT Messages postés 323 Date d'inscription Statut Membre Dernière intervention -
OlivrT Messages postés 323 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
SVP pouriez vous m'expliquer c quoi un curseur et à quoi sert il?? un exemple ne serait pas de refus merci.
SVP pouriez vous m'expliquer c quoi un curseur et à quoi sert il?? un exemple ne serait pas de refus merci.
A voir également:
- {SQL Server} c'est koi un curseur
- Cybera server - Télécharger - Divers Réseau & Wi-Fi
- Ps3 media server - Télécharger - Divers Réseau & Wi-Fi
- Filezilla server - Télécharger - Téléchargement & Transfert
- Comment faire apparaître le curseur sans souris - Guide
- Mysql community server - Télécharger - Bases de données
6 réponses
voici un exemple de script que j'ai fait. Nous avons un call center, et une table client par lettre de alphabet. Chaque table associée à un agent commercial. Le problème c'est de mettre à jour ces tables chaque jour selon un nombre de fichier trouvés dans x répertoires sur le réseau. Le nombre de fichier pouvant varier chaque jour, impossible de créer un pack pour un fichier qui peut-être ne sera pas là ...
Le nombre de variantes étant trop important, j''ai donc créé un cursor pour créer un sql dynamique :
SET @SQL = 'INSERT INTO [MaBase].[dbo].[import_temp]('[NUMPAQ], [NOTPAQ])'
DECLARE cursor_forum CURSOR FOR SELECT [rowdesc] FROM [MaBase].[dbo].[tmpFile]
DECLARE @row VARCHAR(600), @insert VARCHAR(1500)
DECLARE @do INT
SET @do = 1
OPEN cursor_forum
FETCH NEXT FROM cursor_forum INTO @row
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
SET @insert = @sql + ' VALUES (' + @row + ')'
EXEC(@insert)
SET @do = @do + 1
END
FETCH NEXT FROM cursor_forum INTO @row
END
CLOSE cursor_forum
DEALLOCATE cursor_forum
Je ne rentre pas dans les détails mais c'est vraiment quand on ne peut faire autrement qu'il faut utiliser les curseurs. Dans mon cas des fichiers à importer tous les jours ... le nombre pouvant varier ... données temporaires ...
Le nombre de variantes étant trop important, j''ai donc créé un cursor pour créer un sql dynamique :
SET @SQL = 'INSERT INTO [MaBase].[dbo].[import_temp]('[NUMPAQ], [NOTPAQ])'
DECLARE cursor_forum CURSOR FOR SELECT [rowdesc] FROM [MaBase].[dbo].[tmpFile]
DECLARE @row VARCHAR(600), @insert VARCHAR(1500)
DECLARE @do INT
SET @do = 1
OPEN cursor_forum
FETCH NEXT FROM cursor_forum INTO @row
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
SET @insert = @sql + ' VALUES (' + @row + ')'
EXEC(@insert)
SET @do = @do + 1
END
FETCH NEXT FROM cursor_forum INTO @row
END
CLOSE cursor_forum
DEALLOCATE cursor_forum
Je ne rentre pas dans les détails mais c'est vraiment quand on ne peut faire autrement qu'il faut utiliser les curseurs. Dans mon cas des fichiers à importer tous les jours ... le nombre pouvant varier ... données temporaires ...
c'est juste du concret, l'exemple de Blux est plus simple mais tout à fait parlant.
Gardez en mémoire que c'est possible, il ne faut surtout pas que cela vous fasse peur.
Bonne journée
Gardez en mémoire que c'est possible, il ne faut surtout pas que cela vous fasse peur.
Bonne journée
Salut,
en gros, c'est un pointeur qui va pouvoir te permettre d'accéder de manière individuelle aux résultats d'une requête, un peu comme si tous les résultats étaient mis dans un tableau et que tu puisses le parcourir.
C'est utilisé pour faire des traitements particuliers sur un jeu de résultats et c'est employé essentiellement avec du SQL procédural (type PL/SQL ou SQL dans un programme batch).
Google sera ton ami pour des exemples...
en gros, c'est un pointeur qui va pouvoir te permettre d'accéder de manière individuelle aux résultats d'une requête, un peu comme si tous les résultats étaient mis dans un tableau et que tu puisses le parcourir.
C'est utilisé pour faire des traitements particuliers sur un jeu de résultats et c'est employé essentiellement avec du SQL procédural (type PL/SQL ou SQL dans un programme batch).
Google sera ton ami pour des exemples...
J'ajouterai que c'est à éviter car cela demande beaucoup de ressources à un serveur ... mais parfois il est impossible de faire autrement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
"C'est utilisé pour faire des traitements particuliers sur un jeu de résultats"
quels traitement par exemple (un tri) ???
quels traitement par exemple (un tri) ???
quels traitement par exemple (un tri) ???
Non, ça, tu le laisses faire par le moteur SQL avec un GROUP BY...:-)
C'est traiter de manière particulière UNE ligne de résultat (le tri ne s'interesse qu'à la globalité des résultats)
Ex :
Si une ligne contient toto, alors mettre à jour la table titi...
Si une ligne contient tata, alors mettre à jour la table titi et tutu..
Si une ligne contient tutu, alors mettre à jour la table tata et toto...
Tu devrais écrire 3 requêtes SQL pour faire ces 3 traitements, à passer sur toutes les lignes de résultat, donc 3 lancements de la requête initiale pour les mises à jour.
Avec un curseur, tu lances ta requête, et à chaque ligne remontée (fetch du curseur) tu fais ton traitement : les données ne sont lues qu'une fois...
Non, ça, tu le laisses faire par le moteur SQL avec un GROUP BY...:-)
C'est traiter de manière particulière UNE ligne de résultat (le tri ne s'interesse qu'à la globalité des résultats)
Ex :
Si une ligne contient toto, alors mettre à jour la table titi...
Si une ligne contient tata, alors mettre à jour la table titi et tutu..
Si une ligne contient tutu, alors mettre à jour la table tata et toto...
Tu devrais écrire 3 requêtes SQL pour faire ces 3 traitements, à passer sur toutes les lignes de résultat, donc 3 lancements de la requête initiale pour les mises à jour.
Avec un curseur, tu lances ta requête, et à chaque ligne remontée (fetch du curseur) tu fais ton traitement : les données ne sont lues qu'une fois...