Masseneinfügung über gespeicherte Prozedur: Fehler wird behoben
Ein Benutzer hat versucht, eine funktionierende Masseneinfügungsabfrage in eine gespeicherte Prozedur zu kapseln Fehler bei der Verwendung von Dateivariablen innerhalb der BULK INSERT-Anweisung. Der gespeicherte Prozedurcode des Benutzers sieht wie folgt aus:
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
Dieser Code führte jedoch zu den folgenden Fehlern:
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.
Der Kern dieses Problems liegt in der Unfähigkeit von BULK INSERT Akzeptieren Sie Dateinamen als Variablen. Während eine Anweisung wie diese gültig ist:
BULK INSERT ZIPCodes FROM 'e:-digit Commercial.csv' WITH
Verwendung einer Dateinamenvariablen (z. B. DECLARE @filename VARCHAR(255) SET @filename = 'e:5-digit Commercial.csv') innerhalb der BULK Die INSERT-Anweisung wird unweigerlich fehlschlagen.
Um dieses Problem zu lösen, besteht ein praktikabler Ansatz darin, die BULK INSERT-Anweisung als zu erstellen eine Zeichenfolge (mit einem festen Dateinamen) und führen Sie sie dynamisch mit sp_executesql aus:
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 Einhaltung dieser Richtlinien kann die Unfähigkeit von BULK INSERT, Dateinamenvariablen zu akzeptieren, umgangen werden, was eine erfolgreiche Erstellung ermöglicht von gespeicherten Prozeduren, die Masseneinfügungen ausführen.
Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Falsche Syntax in der Nähe von ‚@filepath'' in der gespeicherten Masseneinfügungsprozedur von SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!