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
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.
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
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
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!