Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Membetulkan Ralat 'Sintaks yang salah berhampiran '@filepath'' dalam Prosedur Sisipan Pukal SQL Server?

Bagaimana untuk Membetulkan Ralat 'Sintaks yang salah berhampiran '@filepath'' dalam Prosedur Sisipan Pukal SQL Server?

Susan Sarandon
Susan Sarandonasal
2024-12-29 04:10:13524semak imbas

How to Fix

Sisip Pukal melalui Prosedur Tersimpan: Menyelesaikan Ralat

Dalam percubaan untuk merangkum pertanyaan sisipan pukal yang berfungsi ke dalam prosedur tersimpan, pengguna menemui ralat apabila menggunakan pembolehubah fail dalam pernyataan INSERT PUKAL. Kod prosedur tersimpan pengguna muncul seperti berikut:

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

Walau bagaimanapun, kod ini mengakibatkan ralat berikut:

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.

Inti isu ini terletak pada ketidakupayaan BULK INSERT untuk menerima nama fail sebagai pembolehubah. Walaupun pernyataan seperti ini sah:

BULK INSERT ZIPCodes 
FROM  'e:-digit Commercial.csv' 
WITH 

Menggunakan pembolehubah nama fail (cth., ISYTIHKAN @nama fail VARCHAR(255) SET @filename = 'e:5-digit Commercial.csv') dalam PUKAL Pernyataan INSERT pasti akan gagal.

Untuk menyelesaikan isu ini, satu pendekatan yang berdaya maju ialah membina PUKAL INSERT pernyataan sebagai rentetan (dengan nama fail tetap) dan laksanakannya secara dinamik menggunakan sp_executesql:

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

Dengan mematuhi garis panduan ini, ketidakupayaan BULK INSERT untuk menerima pembolehubah nama fail boleh dielakkan, membenarkan kejayaan mencipta prosedur tersimpan yang melaksanakan sisipan pukal.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat 'Sintaks yang salah berhampiran '@filepath'' dalam Prosedur Sisipan Pukal SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn