25 avril 2013
par maryam khiali
2 Commentaires
Dans certains cas, nous avons besoin des curseurs pour boucler sur une information afin de faire un traitement en masse.
Voici 2 cas ou j’ai eu besoin d’utiliser des curseurs avec SQL server:
CAS 1: je devais, pour répondre aux besoins d’une présentation, simuler des données. A partir d’une table ou j’avais des utilisateurs, j’ai alimenté une table répertoriant des connexions. Le but étant de voir comment les utilisateurs se connectent à une plateforme.
DECLARE db_cursor CURSOR
FOR SELECT id, userid FROM moodle_mdl_log
WHERE userid = 0 and module = ‘login’
DECLARE @id int
DECLARE @userid int
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @id, @userid
WHILE @@FETCH_STATUS = 0
BEGIN
/*PRINT @id*/
UPDATE moodle_mdl_log
SET userid = (SELECT TOP 1 id FROM dbo.randuser order by NEWID())
WHERE CURRENT of db_cursor
FETCH NEXT FROM db_cursor INTO @id, @userid
END
CLOSE db_cursor
DEALLOCATE db_cursor
CAS 2 : A un instant t du projet, la base de production a été copiée en recette : des données de production se sont donc retrouvées en recette. Les utilisateurs m’ont alors demandés de tout vider et de tout recharger. Pour vider les tables en masse j’ai donc utilisé un cureur.
DECLARE db_cursor CURSOR
FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE Table_Type=’BASE TABLE’ and TABLE_NAME NOT IN (‘xxx’,'yyy’) and TABLE_NAME NOT LIKE (‘Tmp%’)
DECLARE @table varchar(50)
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @table
WHILE @@FETCH_STATUS = 0
BEGIN
/*PRINT @id*/
exec(‘TRUNCATE TABLE ‘ + @table)
FETCH NEXT FROM db_cursor INTO @table
END
CLOSE db_cursor
DEALLOCATE db_cursor
Rien d’extraordinaire pour ce post mais ça pourra peut être servir…