Il est parfois nécessaire de créer un curseur pour exécuter une procédure stockée sur chacune des lignes du curseur, en passant en paramètre les valeurs des colonnes de la requête qui spécifie le curseur.
SQL Server 2008 a introduit le type TABLE, qui permet de spécifier par un type des variables de type TABLE.
Cette solution est une alternative moins pire que le curseur : voyons comment l’utiliser (avec modération !)
=> Créons tout d’abord un type qui structurera les variables de type TABLE que nous allons utiliser :
1 2 3 4 | CREATE TYPE dbo.TyTbNombres AS TABLE ( unNombre TINYINT ) |
=> Créons une procédure stockée acceptant en entrée un paramètre de type TABLE
1 2 3 4 5 6 7 | CREATE PROCEDURE PsTest @uneTable dbo.TyTbNombres READONLY AS BEGIN SELECT unNombre FROM @uneTable END |
=> Dans le code de la procédure stockée appelante :
1 2 3 4 | DECLARE @maTable dbo.TyTbNombres INSERT INTO @maTable VALUES (1), (2), (3) EXEC dbo.PsTest @maTable |
Il est ensuite simple, dans la procédure stockée appelée, en l’occurence PsTest, de spécifier une jointure sur la variable de type table …
ElSuket