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!