Maison >base de données >tutoriel mysql >Comment dépanner les erreurs de procédure stockée d'insertion en masse lors de l'utilisation de chemins de fichiers variables ?

Comment dépanner les erreurs de procédure stockée d'insertion en masse lors de l'utilisation de chemins de fichiers variables ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 09:06:10411parcourir

How to Troubleshoot Bulk Insert Stored Procedure Errors When Using Variable File Paths?

Insertion groupée à l'aide de procédures stockées : dépannage des erreurs courantes

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 :

  • Coder en dur le chemin du fichier directement dans le code de la procédure stockée.
  • Utiliser du SQL dynamique pour créer et exécuter l'instruction BULK INSERT avec le fichier souhaité. path.

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!

Déclaration:
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