Maison > base de données > tutoriel mysql > Comment corriger l'erreur « Syntaxe incorrecte près de « @filepath » » dans la procédure stockée d'insertion en masse de SQL Server ?

Comment corriger l'erreur « Syntaxe incorrecte près de « @filepath » » dans la procédure stockée d'insertion en masse de SQL Server ?

Susan Sarandon
Libérer: 2024-12-29 04:10:13
original
470 Les gens l'ont consulté

How to Fix

Insertion groupée via une procédure stockée : résolution de l'erreur

Dans une tentative d'encapsulation d'une requête d'insertion groupée de travail dans une procédure stockée, un utilisateur a rencontré erreurs lors de l’utilisation de variables de fichier dans l’instruction BULK INSERT. Le code de la procédure stockée de l'utilisateur apparaît comme suit :

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
Copier après la connexion

Cependant, ce code a entraîné les erreurs suivantes :

Msg 102, Level 15, State 1, Procedure
InsertZipCode, Line 6 Incorrect syntax
near '@filepath'.

Msg 319, Level 15, State 1, Procedure
InsertZipCode, Line 7 Incorrect syntax
near the keyword 'with'. If this
statement is a common table
expression, an xmlnamespaces clause or
a change tracking context clause, the
previous statement must be terminated
with a semicolon.
Copier après la connexion

Le nœud de ce problème réside dans l'incapacité de BULK INSERT à accepter les noms de fichiers comme variables. Bien qu'une déclaration comme celle-ci soit valide :

BULK INSERT ZIPCodes 
FROM  'e:-digit Commercial.csv' 
WITH 
Copier après la connexion

Utilisation d'une variable de nom de fichier (par exemple, DECLARE @filename VARCHAR(255) SET @filename = 'e:5-digit Commercial.csv') dans le BULK L'instruction INSERT échouera inévitablement.

Pour résoudre ce problème, une approche viable consiste à construire l'instruction BULK INSERT sous forme de chaîne (avec un nom de fichier fixe) et exécutez-le dynamiquement à l'aide de sp_executesql :

DECLARE @filepath nvarchar(500)
SET @filepath = N'e:-digit Commercial.csv'

DECLARE @bulkinsert NVARCHAR(2000)

SET @bulkinsert = 
       N'BULK INSERT ZIPCodes FROM ''' + 
       @filepath + 
       N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')'

EXEC sp_executesql @bulkinsert
Copier après la connexion

En adhérant à ces directives, l'incapacité de BULK INSERT à accepter les variables de nom de fichier peut être contournée, permettant ainsi la création réussie de procédures stockées qui exécuter des insertions groupées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal