Utiliser le type TABLE avec SQL Server 2008

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

Laisser un commentaire