Procédure stockée,select * sur une table

Fermé
glob04d - 21 janv. 2011 à 11:58
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 21 janv. 2011 à 17:10
Bonjour,

Je souhaiterais créer une procédure stockée avec comme paramètre le nom d'une table.
Ce paramètre serait par exemple un varchar(100) , et je voudrais faire un select * sur cette table.

Par exemple :

CREATE PROCEDURE [dbo].[MaProcedure]
@matable varchar(100)
AS
SELECT * FROM @matable

Le problème est qu'il me dit que ma variable doit être déclarée.
( un 'delete from @matable' me pose le même problème )


Par contre si je fais 'select @matable', juste pour afficher le nom de ma table, ça fonctionne

Est ce que vous auriez une idée ?

merci


1 réponse

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 janv. 2011 à 17:10
Bonjour,

Le problème, c'est que @matable n'est pas une table, c'est une chaîne de caractère.
La solution est de construire la requête sous forme de chaîne de caractère, puis d'appeler une fonction prédéfinie pour l'exécuter.

Par contre, cela va dépendre de ton SGBD...

Par exemple sous MS SQL Server, tu devrais écrire :

CREATE PROCEDURE [dbo].[MaProcedure]
@matable varchar(100)
AS
BEGIN
    DECLARE @sql varchar(max)
    SET @sql = 'SELECT * FROM ' + @matable
    EXEC sp_executesql @sql
END


Xavier
0