Heim >Datenbank >MySQL-Tutorial >Wie behebe ich Fehler beim Masseneinfügen gespeicherter Prozeduren bei der Verwendung variabler Dateipfade?

Wie behebe ich Fehler beim Masseneinfügen gespeicherter Prozeduren bei der Verwendung variabler Dateipfade?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 09:06:10416Durchsuche

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

Masseneinfügung mit gespeicherten Prozeduren: Fehlerbehebung bei häufigen Fehlern

Beim Versuch, eine gespeicherte Prozedur für die Masseneinfügung von Daten mit dem Befehl BULK INSERT zu erstellen, können Fehler auftreten. Ein solcher Fehler tritt auf, wenn versucht wird, dem Dateinamenparameter in der gespeicherten Prozedur eine Dateipfadvariable zuzuweisen.

In einer typischen BULK INSERT-Abfrage funktioniert die Angabe eines Dateipfads als Zeichenfolge korrekt:

BULK INSERT ZIPCodes 
FROM  'e:-digit Commercial.csv' 
WITH 
( 
     FIRSTROW = 2 ,
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
)

Beim Versuch, eine gespeicherte Prozedur mit einem variablen Dateipfad zu erstellen, können jedoch Fehler auftreten:

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

Falsch Syntax in der Nähe von '@filepath' und 'with'

Dieser Fehler tritt auf, weil der BULK INSERT-Befehl Dateipfade nicht als Variablen unterstützt. Um dieses Problem zu beheben, können Sie entweder:

  • Den Dateipfad direkt in den Code der gespeicherten Prozedur fest codieren.
  • Dynamisches SQL verwenden, um die BULK INSERT-Anweisung mit der gewünschten Datei zu erstellen und auszuführen Pfad.

Verwenden von Dynamic SQL zum Erstellen des BULK INSERT Erklärung

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

Dieser Ansatz ermöglicht es Ihnen, die Flexibilität der Verwendung verschiedener Dateipfade beizubehalten und gleichzeitig gespeicherte Prozeduren für Masseneinfügungen zu nutzen.

Das obige ist der detaillierte Inhalt vonWie behebe ich Fehler beim Masseneinfügen gespeicherter Prozeduren bei der Verwendung variabler Dateipfade?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn