Heim > Datenbank > MySQL-Tutorial > Wie behebt man den Fehler „Falsche Syntax in der Nähe von ‚@filepath'' in der gespeicherten Masseneinfügungsprozedur von SQL Server?

Wie behebt man den Fehler „Falsche Syntax in der Nähe von ‚@filepath'' in der gespeicherten Masseneinfügungsprozedur von SQL Server?

Susan Sarandon
Freigeben: 2024-12-29 04:10:13
Original
469 Leute haben es durchsucht

How to Fix

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
Nach dem Login kopieren

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.
Nach dem Login kopieren

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 
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage