OVH Cloud OVH Cloud

construction chaîne

10 réponses
Avatar
Pierre-Yves
Bonjour,

je souhaite construire ma chaine sql dans une procédure stockée. Je vous
donne un petit exemple que j'essaie actuellement

declare @sql as varchar(2000),@var as varchar(10)
set @var='VH001'

set @sql= 'select * from marche_livraison where article=' + ''' + @var +
'''
exec @sql

ca plante. Comment faut il travailler avec les quotes? les doubler?

merci de me donner la syntaxe

10 réponses

Avatar
www.eztree-msdn.com \(Laurent Jordi\) Enlever le s à infos pour me contacter par mail
Salut... il y a trop de cotes...

Essaye

set @sql= 'select * from marche_livraison where article=' + @var + ''''

Et puis je ne vois pas l'interet de faire ça alors que tu peux faire

SELECT * FROM marche_livraison WHERE article = @var

2 choses l'utilisation de * est déconseillée et l'utilisation de chaines SQL
construites dans une Proc Stock ne donne pas de bonnes perf...

@+

LJ





"Pierre-Yves" a écrit dans le message de
news:%
Bonjour,

je souhaite construire ma chaine sql dans une procédure stockée. Je vous
donne un petit exemple que j'essaie actuellement

declare @sql as varchar(2000),@var as varchar(10)
set @var='VH001'

set @sql= 'select * from marche_livraison where article=' + ''' + @var +
'''
exec @sql

ca plante. Comment faut il travailler avec les quotes? les doubler?

merci de me donner la syntaxe




Avatar
Pierre-Yves
ca ne fonctionne pas mieux.
l'exemple cité est un exemple pour le principe. Il est vrai que pour cet
exemple, on pouvait le faire en direct.

merci de me donner une autre syntaxe

"www.eztree-msdn.com (Laurent Jordi) Enlever le s à infos pour me contacter
par mail" a écrit dans le message de
news:%23$
Salut... il y a trop de cotes...

Essaye

set @sql= 'select * from marche_livraison where article=' + @var + ''''

Et puis je ne vois pas l'interet de faire ça alors que tu peux faire

SELECT * FROM marche_livraison WHERE article = @var

2 choses l'utilisation de * est déconseillée et l'utilisation de chaines


SQL
construites dans une Proc Stock ne donne pas de bonnes perf...

@+

LJ





"Pierre-Yves" a écrit dans le message de
news:%
> Bonjour,
>
> je souhaite construire ma chaine sql dans une procédure stockée. Je vous
> donne un petit exemple que j'essaie actuellement
>
> declare @sql as varchar(2000),@var as varchar(10)
> set @var='VH001'
>
> set @sql= 'select * from marche_livraison where article=' + ''' + @var


+
> '''
> exec @sql
>
> ca plante. Comment faut il travailler avec les quotes? les doubler?
>
> merci de me donner la syntaxe
>
>




Avatar
Patrice
Cela devrait marcher. Quel est le message d'erreur ?

Si cela marche à la compilation fais un PRINT @sql histoire de voir la
chaine générée.

Comme indiqué par "eztree", générer des chaines dynamiquement dans une SP
diminue un peu l'intéret des SP...

Patrice


"Pierre-Yves" a écrit dans le message de
news:eG5n$
ca ne fonctionne pas mieux.
l'exemple cité est un exemple pour le principe. Il est vrai que pour cet
exemple, on pouvait le faire en direct.

merci de me donner une autre syntaxe

"www.eztree-msdn.com (Laurent Jordi) Enlever le s à infos pour me


contacter
par mail" a écrit dans le message de
news:%23$
> Salut... il y a trop de cotes...
>
> Essaye
>
> set @sql= 'select * from marche_livraison where article=' + @var + ''''
>
> Et puis je ne vois pas l'interet de faire ça alors que tu peux faire
>
> SELECT * FROM marche_livraison WHERE article = @var
>
> 2 choses l'utilisation de * est déconseillée et l'utilisation de chaines
SQL
> construites dans une Proc Stock ne donne pas de bonnes perf...
>
> @+
>
> LJ
>
>
>
>
>
> "Pierre-Yves" a écrit dans le message de
> news:%
> > Bonjour,
> >
> > je souhaite construire ma chaine sql dans une procédure stockée. Je


vous
> > donne un petit exemple que j'essaie actuellement
> >
> > declare @sql as varchar(2000),@var as varchar(10)
> > set @var='VH001'
> >
> > set @sql= 'select * from marche_livraison where article=' + ''' +


@var
+
> > '''
> > exec @sql
> >
> > ca plante. Comment faut il travailler avec les quotes? les doubler?
> >
> > merci de me donner la syntaxe
> >
> >
>
>




Avatar
AXL
tu as un probleme dans ton nombre de '
declare @sql as varchar(2000),@var as varchar(10)
set @var='VH001'

set @sql= 'select * from marche_livraison where article=''' + @var +
''''
exec @sql

"Pierre-Yves" a écrit dans le message de
news:%
Bonjour,

je souhaite construire ma chaine sql dans une procédure stockée. Je vous
donne un petit exemple que j'essaie actuellement

declare @sql as varchar(2000),@var as varchar(10)
set @var='VH001'

set @sql= 'select * from marche_livraison where article=' + ''' + @var +
'''
exec @sql

ca plante. Comment faut il travailler avec les quotes? les doubler?

merci de me donner la syntaxe




Avatar
Pierre-Yves
voila ca que j'ai tapé:

declare @var as varchar(20),@sql as varchar(2000)

set @var='VH001'
set @sql= 'select * from marche_livraison where article=' + @var + ''''
print @sql
exec @sql

fenêtre de résultat:
select * from marche_livraison where article=VH001'
Serveur : Msg 2812, Niveau 16, État 62, Ligne 6
Impossible de trouver la procédure stockée 'select * from marche_livraison
where article=VH001''.

"Patrice" a écrit dans le message de
news:
Cela devrait marcher. Quel est le message d'erreur ?

Si cela marche à la compilation fais un PRINT @sql histoire de voir la
chaine générée.

Comme indiqué par "eztree", générer des chaines dynamiquement dans une SP
diminue un peu l'intéret des SP...

Patrice


"Pierre-Yves" a écrit dans le message de
news:eG5n$
> ca ne fonctionne pas mieux.
> l'exemple cité est un exemple pour le principe. Il est vrai que pour cet
> exemple, on pouvait le faire en direct.
>
> merci de me donner une autre syntaxe
>
> "www.eztree-msdn.com (Laurent Jordi) Enlever le s à infos pour me
contacter
> par mail" a écrit dans le message de
> news:%23$
> > Salut... il y a trop de cotes...
> >
> > Essaye
> >
> > set @sql= 'select * from marche_livraison where article=' + @var +


''''
> >
> > Et puis je ne vois pas l'interet de faire ça alors que tu peux faire
> >
> > SELECT * FROM marche_livraison WHERE article = @var
> >
> > 2 choses l'utilisation de * est déconseillée et l'utilisation de


chaines
> SQL
> > construites dans une Proc Stock ne donne pas de bonnes perf...
> >
> > @+
> >
> > LJ
> >
> >
> >
> >
> >
> > "Pierre-Yves" a écrit dans le message de
> > news:%
> > > Bonjour,
> > >
> > > je souhaite construire ma chaine sql dans une procédure stockée. Je
vous
> > > donne un petit exemple que j'essaie actuellement
> > >
> > > declare @sql as varchar(2000),@var as varchar(10)
> > > set @var='VH001'
> > >
> > > set @sql= 'select * from marche_livraison where article=' + ''' +
@var
> +
> > > '''
> > > exec @sql
> > >
> > > ca plante. Comment faut il travailler avec les quotes? les doubler?
> > >
> > > merci de me donner la syntaxe
> > >
> > >
> >
> >
>
>




Avatar
Pierre-Yves
declare @var as varchar(20),@sql as varchar(2000)

set @var='VH001'
set @sql= 'select * from marche_livraison where article=''' + @var + ''''

print @sql
exec @sql

voici l'erreur qu'il me génère de nouveau:
select * from marche_livraison where article='VH001'
Serveur : Msg 2812, Niveau 16, État 62, Ligne 7
Impossible de trouver la procédure stockée 'select * from marche_livraison
where article='VH001''.

pourtant la chaîne a l'air d'être bonne

"AXL" a écrit dans le message de
news:
tu as un probleme dans ton nombre de '
declare @sql as varchar(2000),@var as varchar(10)
set @var='VH001'

set @sql= 'select * from marche_livraison where article=''' + @var +
''''
exec @sql

"Pierre-Yves" a écrit dans le message de
news:%
> Bonjour,
>
> je souhaite construire ma chaine sql dans une procédure stockée. Je vous
> donne un petit exemple que j'essaie actuellement
>
> declare @sql as varchar(2000),@var as varchar(10)
> set @var='VH001'
>
> set @sql= 'select * from marche_livraison where article=' + ''' + @var


+
> '''
> exec @sql
>
> ca plante. Comment faut il travailler avec les quotes? les doubler?
>
> merci de me donner la syntaxe
>
>




Avatar
Yan
bonjour,

le pb ne vient pas de la concaténation, mais de "exec @sql"

pour exécuter un ligne t-sql il faut faire "exec (@sql)", sinon c'est
interprété comme une procédure stockée ou fonction



"Pierre-Yves" a écrit dans le message de
news:%
declare @var as varchar(20),@sql as varchar(2000)

set @var='VH001'
set @sql= 'select * from marche_livraison where article=''' + @var + ''''

print @sql
exec @sql

voici l'erreur qu'il me génère de nouveau:
select * from marche_livraison where article='VH001'
Serveur : Msg 2812, Niveau 16, État 62, Ligne 7
Impossible de trouver la procédure stockée 'select * from marche_livraison
where article='VH001''.

pourtant la chaîne a l'air d'être bonne

"AXL" a écrit dans le message de
news:
> tu as un probleme dans ton nombre de '
> declare @sql as varchar(2000),@var as varchar(10)
> set @var='VH001'
>
> set @sql= 'select * from marche_livraison where article=''' + @var +
> ''''
> exec @sql
>
> "Pierre-Yves" a écrit dans le message de
> news:%
> > Bonjour,
> >
> > je souhaite construire ma chaine sql dans une procédure stockée. Je


vous
> > donne un petit exemple que j'essaie actuellement
> >
> > declare @sql as varchar(2000),@var as varchar(10)
> > set @var='VH001'
> >
> > set @sql= 'select * from marche_livraison where article=' + ''' +


@var
+
> > '''
> > exec @sql
> >
> > ca plante. Comment faut il travailler avec les quotes? les doubler?
> >
> > merci de me donner la syntaxe
> >
> >
>
>




Avatar
Pierre-Yves
ok merci ca marche

"Yan" a écrit dans le message de
news:c7qjub$n63$
bonjour,

le pb ne vient pas de la concaténation, mais de "exec @sql"

pour exécuter un ligne t-sql il faut faire "exec (@sql)", sinon c'est
interprété comme une procédure stockée ou fonction



"Pierre-Yves" a écrit dans le message de
news:%
> declare @var as varchar(20),@sql as varchar(2000)
>
> set @var='VH001'
> set @sql= 'select * from marche_livraison where article=''' + @var +


''''
>
> print @sql
> exec @sql
>
> voici l'erreur qu'il me génère de nouveau:
> select * from marche_livraison where article='VH001'
> Serveur : Msg 2812, Niveau 16, État 62, Ligne 7
> Impossible de trouver la procédure stockée 'select * from


marche_livraison
> where article='VH001''.
>
> pourtant la chaîne a l'air d'être bonne
>
> "AXL" a écrit dans le message de
> news:
> > tu as un probleme dans ton nombre de '
> > declare @sql as varchar(2000),@var as varchar(10)
> > set @var='VH001'
> >
> > set @sql= 'select * from marche_livraison where article=''' + @var +
> > ''''
> > exec @sql
> >
> > "Pierre-Yves" a écrit dans le message de
> > news:%
> > > Bonjour,
> > >
> > > je souhaite construire ma chaine sql dans une procédure stockée. Je
vous
> > > donne un petit exemple que j'essaie actuellement
> > >
> > > declare @sql as varchar(2000),@var as varchar(10)
> > > set @var='VH001'
> > >
> > > set @sql= 'select * from marche_livraison where article=' + ''' +
@var
> +
> > > '''
> > > exec @sql
> > >
> > > ca plante. Comment faut il travailler avec les quotes? les doubler?
> > >
> > > merci de me donner la syntaxe
> > >
> > >
> >
> >
>
>




Avatar
AXL
Les () c'est si evident qu'on en viens a les oublier !!!

"Yan" a écrit dans le message de
news:c7qjub$n63$
bonjour,

le pb ne vient pas de la concaténation, mais de "exec @sql"

pour exécuter un ligne t-sql il faut faire "exec (@sql)", sinon c'est
interprété comme une procédure stockée ou fonction



"Pierre-Yves" a écrit dans le message de
news:%
> declare @var as varchar(20),@sql as varchar(2000)
>
> set @var='VH001'
> set @sql= 'select * from marche_livraison where article=''' + @var +


''''
>
> print @sql
> exec @sql
>
> voici l'erreur qu'il me génère de nouveau:
> select * from marche_livraison where article='VH001'
> Serveur : Msg 2812, Niveau 16, État 62, Ligne 7
> Impossible de trouver la procédure stockée 'select * from


marche_livraison
> where article='VH001''.
>
> pourtant la chaîne a l'air d'être bonne
>
> "AXL" a écrit dans le message de
> news:
> > tu as un probleme dans ton nombre de '
> > declare @sql as varchar(2000),@var as varchar(10)
> > set @var='VH001'
> >
> > set @sql= 'select * from marche_livraison where article=''' + @var +
> > ''''
> > exec @sql
> >
> > "Pierre-Yves" a écrit dans le message de
> > news:%
> > > Bonjour,
> > >
> > > je souhaite construire ma chaine sql dans une procédure stockée. Je
vous
> > > donne un petit exemple que j'essaie actuellement
> > >
> > > declare @sql as varchar(2000),@var as varchar(10)
> > > set @var='VH001'
> > >
> > > set @sql= 'select * from marche_livraison where article=' + ''' +
@var
> +
> > > '''
> > > exec @sql
> > >
> > > ca plante. Comment faut il travailler avec les quotes? les doubler?
> > >
> > > merci de me donner la syntaxe
> > >
> > >
> >
> >
>
>




Avatar
Fred BROUARD
dans ce cas mieux vaut utiliser la fonction transact SQL QUOTENAME :

declare @sql as varchar(2000)
declare @var as varchar(10)

set @var= QUOTENAME('VH001')

set @sql= 'select * from marche_livraison where article = + @var

exec @sql

A +

--
Frédéric BROUARD, MVP MS SQL Server. Expert Langage SQL / 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 *************************


Pierre-Yves a écrit:
Bonjour,

je souhaite construire ma chaine sql dans une procédure stockée. Je vous
donne un petit exemple que j'essaie actuellement

declare @sql as varchar(2000),@var as varchar(10)
set @var='VH001'

set @sql= 'select * from marche_livraison where article=' + ''' + @var +
'''
exec @sql

ca plante. Comment faut il travailler avec les quotes? les doubler?

merci de me donner la syntaxe