OVH Cloud OVH Cloud

SIMPLE REQUETE

4 réponses
Avatar
Michael
Bonjour a tous,

je coince sur une requete qui pourtant me parait assez simple :

dans une proc Stock, je passe le nom de la table a attaquer en paramètres :

@strType varchar(20)

BEGIN
SELECT numcontrat FROM @strType WHERE ident_client=@ident
END


@strType, nom d'objet incorrect

pourtant strtype est bien alimenté...

Cela vous parle t'il ?

Michael.

4 réponses

Avatar
Aba
Ceci devrait fonctionner :
EXECUTE ('SELECT numcontrat FROM '+@strType+' WHERE
ident_client='+CONVERT(varchar,@ident))


"Michael" a écrit dans le
message de news:
Bonjour a tous,

je coince sur une requete qui pourtant me parait assez simple :

dans une proc Stock, je passe le nom de la table a attaquer en paramètres


:

@strType varchar(20)

BEGIN
SELECT numcontrat FROM @strType WHERE ident_client=@ident
END


@strType, nom d'objet incorrect

pourtant strtype est bien alimenté...

Cela vous parle t'il ?

Michael.






Avatar
Fred BROUARD
en aucun cas un nom d'objet (table, vue, colonne...) ne peut être en paramètres
d'une requête.

Seule la partie affectable d'une expression mathématique de comparaison peut
être paramétrée...

En revanche cela est possible en utilisant du SQL dynamique, mais c'est pas
performant (pas de préparation).

A +

Michael a écrit:
Bonjour a tous,

je coince sur une requete qui pourtant me parait assez simple :

dans une proc Stock, je passe le nom de la table a attaquer en paramètres :

@strType varchar(20)

BEGIN
SELECT numcontrat FROM @strType WHERE ident_client=@ident
END


@strType, nom d'objet incorrect

pourtant strtype est bien alimenté...

Cela vous parle t'il ?

Michael.







--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Michael
Effectivement, la solution de Aba n'a pas fonctionnée...

en gros a par faire un truc du genre

If @strType ='TABLE1'
SELECT numcontrat FROM TABLE1....
IF @strType ='TABLE2'
SELECT numcontrat FROM TABLE2...

etc...

c'est cela ?

"Fred BROUARD" a écrit dans le message de
news:
en aucun cas un nom d'objet (table, vue, colonne...) ne peut être en


paramètres
d'une requête.

Seule la partie affectable d'une expression mathématique de comparaison


peut
être paramétrée...

En revanche cela est possible en utilisant du SQL dynamique, mais c'est


pas
performant (pas de préparation).

A +

Michael a écrit:
> Bonjour a tous,
>
> je coince sur une requete qui pourtant me parait assez simple :
>
> dans une proc Stock, je passe le nom de la table a attaquer en


paramètres :
>
> @strType varchar(20)
>
> BEGIN
> SELECT numcontrat FROM @strType WHERE ident_client=@ident
> END
>
>
> @strType, nom d'objet incorrect
>
> pourtant strtype est bien alimenté...
>
> Cela vous parle t'il ?
>
> Michael.
>
>
>
>

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Avatar
Patrice
La solution d'Aba est le "SQL dynamique" auquel Fred faisait alusion :

DECLARE @Table VARCHAR(64)
SET @Table='Information_Schema.Tables'
EXECUTE ('SELECT * FROM '+@Table)

Après l'intérêt est limité car la partie passée en paramètre après le
EXECUTE devra être "compilée" à chaque fois.

--

"Michael" a écrit dans le
message de news:
Effectivement, la solution de Aba n'a pas fonctionnée...

en gros a par faire un truc du genre

If @strType ='TABLE1'
SELECT numcontrat FROM TABLE1....
IF @strType ='TABLE2'
SELECT numcontrat FROM TABLE2...

etc...

c'est cela ?

"Fred BROUARD" a écrit dans le message de
news:
> en aucun cas un nom d'objet (table, vue, colonne...) ne peut être en
paramètres
> d'une requête.
>
> Seule la partie affectable d'une expression mathématique de comparaison
peut
> être paramétrée...
>
> En revanche cela est possible en utilisant du SQL dynamique, mais c'est
pas
> performant (pas de préparation).
>
> A +
>
> Michael a écrit:
> > Bonjour a tous,
> >
> > je coince sur une requete qui pourtant me parait assez simple :
> >
> > dans une proc Stock, je passe le nom de la table a attaquer en
paramètres :
> >
> > @strType varchar(20)
> >
> > BEGIN
> > SELECT numcontrat FROM @strType WHERE ident_client=@ident
> > END
> >
> >
> > @strType, nom d'objet incorrect
> >
> > pourtant strtype est bien alimenté...
> >
> > Cela vous parle t'il ?
> >
> > Michael.
> >
> >
> >
> >
>
> --
> Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
> Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
> Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
> ************************ www.datasapiens.com *************************
>