Bulk insert à l'aide de la procédure stockée
J'ai une requête qui fonctionne bien:
BULK INSERT ZIPCodes
FROM 'e:-digit Commercial.csv'
WITH
(
FIRSTROW = 2 ,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
mais maintenant, je veux créer une procédure stockée pour elle.
J'ai écrit ci-dessous le code pour rendre sa procédure stockée:
create proc dbo.InsertZipCode
@filepath varchar(500)='e:-digit Commercial.csv'
as
begin
BULK INSERT ZIPCodes
FROM @filepath
WITH
(
FIRSTROW = 2 ,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
end
mais sa montre l'erreur:
Msg 102, Niveau 15, État 1, Procédure
InsertZipCode, Ligne 6 syntaxe Incorrecte
près de '@filepath'.Msg 319, Niveau 15, État 1, Procédure
InsertZipCode, Ligne 7 syntaxe Incorrecte
près du mot clé 'avec'. Si ce
déclaration de est une commune de la table
l'expression, un xmlnamespaces clause ou
un suivi des modifications du contexte de la clause, l'
déclaration précédente doit être résilié
avec un point-virgule.
S'il vous plaît dites-moi ce que je fais de mal et ce que je peux faire pour le faire fonctionner dans une procédure stockée.
Grâce
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien de mal avec votre code de procédure stockée - le point est: la
BULK INSERT
commande ne peut pas accepter un nom de fichier en tant que variable.Cela fonctionne:
mais cela ne fonctionne jamais - à l'intérieur d'une procédure stockée ou pas:
De sorte que vous juste ne peut pas le faire de cette façon, malheureusement. Vous pourriez envisager la construction de votre
BULK INSERT
déclaration comme une chaîne de caractères (avec un nom de fichier), et puis l'exécuter en tant que dynamique de SQL, mais je ne vois vraiment pas d'autre solution.Vous il suffit de l'essayer, je pense que vous devez télécharger ce fichier CSV directement dans le 'E' en voiture. Pour cela vous devez avoir les droits d'admin, je pense, ou de demander à quelqu'un qui est dans la base de données de l'administration.
Il existe une alternative à SQL dynamique si vous avez accès à la SQLCmd exe.
L'utilitaire SqlCmd vous permet de passer de la chaîne de remplacement des variables en utilisant l'argument-v.
Vous pouvez utiliser une variable de modèle nommé "chemin d'accès" qui sera remplacé lorsque vous exécutez le script via le cmdline.
Le script SQL qui ressemblerait à:
Vous pouvez alors exécuter le script depuis une ligne de commande en utilisant quelque chose comme ce qui suit:
La partie importante de l'exemple est l'argument-v: