Utilisation d'une variable dans une clause "FROM"

Le
Olivier
Bonjour,

J'ai un petit soucis avec une procdure stocke

J'ai crit une procdure stocke qui accepte un argument
de type 'varchar'.
Cet argument est destin rcuprer le chemin d'accs et
le nom d'un fichier texte.
Au sein de ma procdure, je dsire excuter un 'BULK
INSERT' afin d'insrer le contenu du fichier texte pass
en argument dans une table :
BULK INSERT MyTable FROM @MyFile WITH

Je ne parviens pas compiler ma procdure. 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 procdure est bien
compile mais je reois un message d'erreur l'excution
qui me dit que le fichier 'MyFile' n'existe pas !

J'ai essay d'utiliser la fonction 'CAST' sans rsultat.
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 rsultat.

Bref je sche !
Toute ide est la bienvenue.

Merci d'avance,
Olivier
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Fred BROUARD
Le #11762501
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: ******************
gfourrat
Le #11762491
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



Le #11761261
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




.



Poster une réponse
Anonyme