Heim >Datenbank >MySQL-Tutorial >Warum akzeptiert BULK INSERT keine variablen Dateipfade in gespeicherten Prozeduren?
Masseneinfügung mithilfe gespeicherter Prozeduren: Fehlerbehebung
Beim Versuch, Daten mithilfe einer gespeicherten Prozedur massenhaft einzufügen, sind einem Entwickler Syntaxfehler aufgefallen. Das Ziel bestand darin, eine funktionierende BULK INSERT-Abfrage in eine Prozedur zu replizieren. Hier ist eine Analyse des Problems und seiner Lösung.
Das Problem entsteht durch den Versuch, einen Dateinamen als Variable an den BULK INSERT-Befehl innerhalb der gespeicherten Prozedur zu übergeben. Leider ist dies ein von BULK INSERT nicht unterstützter Vorgang.
Hier ist ein Beispiel für einen erfolglosen Versuch, eine Variable zu verwenden:
DECLARE @filename VARCHAR(255) SET @filename = 'e:-digit Commercial.csv' BULK INSERT ZIPCodes FROM @filename WITH
Stattdessen erwartet der BULK INSERT-Befehl einen fest codierten Dateipfad . Um diese Einschränkung zu umgehen, sollten Sie erwägen, die BULK INSERT-Anweisung als Zeichenfolge mit einem festen Dateinamen zu erstellen und sie als dynamisches SQL auszuführen.
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
Durch die Verwendung von dynamischem SQL kann die konstruierte Anweisung ausgeführt werden, wodurch das Problem aufgelöst wird Syntaxfehler, die in der ursprünglichen Implementierung der gespeicherten Prozedur aufgetreten sind.
Das obige ist der detaillierte Inhalt vonWarum akzeptiert BULK INSERT keine variablen Dateipfade in gespeicherten Prozeduren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!