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
Lepaskan: 2024-12-29 04:10:13
asal
491 orang telah melayarinya

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
Salin selepas log masuk

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.
Salin selepas log masuk

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 
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan