Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Utilisation d'une variable dans une clause "FROM"

3 réponses
Avatar
Olivier
Bonjour,

J'ai un petit soucis avec une proc=E9dure stock=E9e ...

J'ai =E9crit une proc=E9dure stock=E9e qui accepte un argument=20
de type 'varchar'.
Cet argument est destin=E9 =E0 r=E9cup=E9rer le chemin d'acc=E8s et=20
le nom d'un fichier texte.
Au sein de ma proc=E9dure, je d=E9sire ex=E9cuter un 'BULK=20
INSERT' afin d'ins=E9rer le contenu du fichier texte pass=E9=20
en argument dans une table :
BULK INSERT MyTable FROM @MyFile WITH ...

Je ne parviens pas =E0 compiler ma proc=E9dure. Visiblement,=20
l'utilisation de l'argument dans cette instruction n'est=20
pas permise.

Lorsque j'encadre l'argument de crochets (BULK INSERT=20
MyTable FROM [@MyFile] WITH ...) la proc=E9dure est bien=20
compil=E9e mais je re=E7ois un message d'erreur =E0 l'ex=E9cution=20
qui me dit que le fichier 'MyFile' n'existe pas !

J'ai essay=E9 d'utiliser la fonction 'CAST' sans r=E9sultat.
J'ai essay=E9 d'utiliser une variable 'locale' =E0 la place de=20
l'argument (en assignant la valeur de l'argument =E0 la=20
variable locale) ... sans plus de r=E9sultat.

Bref ... je s=E8che !
Toute id=E9e est la bienvenue.

Merci d'avance,
Olivier

3 réponses

Avatar
Fred BROUARD
Exact, les variables ne se placent pas n'importe ou !!!!
En général elle sont réservées à la partie droite d'un prédicat de
comparaison (généralement le WHERE).

Si tu veut paramétrer un ordre plus complexe il faut faire du SQL dynamqiue.
En effet, un ordre SQL comme BULK INSERT est une chaine de caractères et
peut donc être manipulé comme tel...

Exemple :

DECLARE @SQLorder VARCHAR(8000)

SET @SQLorder = 'BULK INSERT MyTable FROM ' + @MyFile
+ ' WITH ... '

EXEC (@SQLorder)

A +

Olivier a écrit:
Bonjour,

J'ai un petit soucis avec une procédure stockée ...

J'ai écrit une procédure stockée qui accepte un argument
de type 'varchar'.
Cet argument est destiné à récupérer le chemin d'accès et
le nom d'un fichier texte.
Au sein de ma procédure, je désire exécuter un 'BULK
INSERT' afin d'insérer le contenu du fichier texte passé
en argument dans une table :
BULK INSERT MyTable FROM @MyFile WITH ...

Je ne parviens pas à compiler ma procédure. Visiblement,
l'utilisation de l'argument dans cette instruction n'est
pas permise.

Lorsque j'encadre l'argument de crochets (BULK INSERT
MyTable FROM [@MyFile] WITH ...) la procédure est bien
compilée mais je reçois un message d'erreur à l'exécution
qui me dit que le fichier 'MyFile' n'existe pas !

J'ai essayé d'utiliser la fonction 'CAST' sans résultat.
J'ai essayé d'utiliser une variable 'locale' à la place de
l'argument (en assignant la valeur de l'argument à la
variable locale) ... sans plus de résultat.

Bref ... je sèche !
Toute idée est la bienvenue.

Merci d'avance,
Olivier




--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / 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
****************** mailto: ******************
Avatar
gfourrat
Tu peux essayer d'exécuter une instruction TSQL dynamique.

Exemple :

create procedure dynamix
@param varchar(30)
as
declare @chaine varchar(70)
set @chaine = 'print '''+@param + ''' '
exec (@chaine)
go

exec dynamix toto

Guillaume Fourrat
Microsoft France
--------------------
Content-Class: urn:content-classes:message
From: "Olivier"
Sender: "Olivier"
Subject: Utilisation d'une variable dans une clause "FROM"
Date: Thu, 16 Oct 2003 02:50:59 -0700
Bonjour,
J'ai un petit soucis avec une procédure stockée ...
J'ai écrit une procédure stockée qui accepte un argument
de type 'varchar'.
Cet argument est destiné à récupérer le chemin d'accès et
le nom d'un fichier texte.
Au sein de ma procédure, je désire exécuter un 'BULK
INSERT' afin d'insérer le contenu du fichier texte passé
en argument dans une table :
BULK INSERT MyTable FROM @MyFile WITH ...
Je ne parviens pas à compiler ma procédure. Visiblement,
l'utilisation de l'argument dans cette instruction n'est
pas permise.
Lorsque j'encadre l'argument de crochets (BULK INSERT
MyTable FROM [@MyFile] WITH ...) la procédure est bien
compilée mais je reçois un message d'erreur à l'exécution
qui me dit que le fichier 'MyFile' n'existe pas !
J'ai essayé d'utiliser la fonction 'CAST' sans résultat.
J'ai essayé d'utiliser une variable 'locale' à la place de
l'argument (en assignant la valeur de l'argument à la
variable locale) ... sans plus de résultat.
Bref ... je sèche !
Toute idée est la bienvenue.
Merci d'avance,
Olivier



Avatar
Merci pour l'information.
J'ai entretemps été victime de SPAM ... ce qui explique ma
lenteur.
-----Message d'origine-----
Tu peux essayer d'exécuter une instruction TSQL dynamique.

Exemple :

create procedure dynamix
@param varchar(30)
as
declare @chaine varchar(70)
set @chaine = 'print '''+@param + ''' '
exec (@chaine)
go

exec dynamix toto

Guillaume Fourrat
Microsoft France
--------------------
Content-Class: urn:content-classes:message
From: "Olivier"
Sender: "Olivier"
Subject: Utilisation d'une variable dans une




clause "FROM"
Date: Thu, 16 Oct 2003 02:50:59 -0700
Bonjour,
J'ai un petit soucis avec une procédure stockée ...
J'ai écrit une procédure stockée qui accepte un argument
de type 'varchar'.
Cet argument est destiné à récupérer le chemin d'accès




et
le nom d'un fichier texte.
Au sein de ma procédure, je désire exécuter un 'BULK
INSERT' afin d'insérer le contenu du fichier texte passé
en argument dans une table :
BULK INSERT MyTable FROM @MyFile WITH ...
Je ne parviens pas à compiler ma procédure.




Visiblement,
l'utilisation de l'argument dans cette instruction n'est
pas permise.
Lorsque j'encadre l'argument de crochets (BULK INSERT
MyTable FROM [@MyFile] WITH ...) la procédure est bien
compilée mais je reçois un message d'erreur à




l'exécution
qui me dit que le fichier 'MyFile' n'existe pas !
J'ai essayé d'utiliser la fonction 'CAST' sans résultat.
J'ai essayé d'utiliser une variable 'locale' à la place




de
l'argument (en assignant la valeur de l'argument à la
variable locale) ... sans plus de résultat.
Bref ... je sèche !
Toute idée est la bienvenue.
Merci d'avance,
Olivier




.