Lorsque vous essayez de créer une procédure stockée pour l'insertion groupée de données à l'aide de la commande BULK INSERT, vous pouvez rencontrer des erreurs. Une de ces erreurs se produit lorsque vous essayez d'attribuer une variable de chemin de fichier au paramètre de nom de fichier dans la procédure stockée.
Dans une requête BULK INSERT typique, la spécification d'un chemin de fichier sous forme de chaîne fonctionne correctement :
BULK INSERT ZIPCodes FROM 'e:-digit Commercial.csv' WITH ( FIRSTROW = 2 , FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' )
Cependant, lorsque vous tentez de créer une procédure stockée avec un chemin de fichier variable, vous pouvez rencontrer des erreurs :
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
Syntaxe incorrecte près '@filepath' et 'with'
Cette erreur se produit car la commande BULK INSERT ne prend pas en charge les chemins de fichiers en tant que variables. Pour résoudre ce problème, vous pouvez soit :
Utilisation de Dynamic SQL pour créer l'INSERT EN BULK Déclaration
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
Cette approche vous permet de conserver la flexibilité d'utiliser différents chemins de fichiers tout en tirant parti des procédures stockées pour les 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!