Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyelesaikan Masalah Sisipan Pukal Ralat Prosedur Tersimpan Apabila Menggunakan Laluan Fail Boleh Ubah?

Bagaimana untuk Menyelesaikan Masalah Sisipan Pukal Ralat Prosedur Tersimpan Apabila Menggunakan Laluan Fail Boleh Ubah?

Barbara Streisand
Barbara Streisandasal
2024-12-25 09:06:10449semak imbas

How to Troubleshoot Bulk Insert Stored Procedure Errors When Using Variable File Paths?

Sisip Pukal Menggunakan Prosedur Tersimpan: Menyelesaikan Masalah Ralat Biasa

Semasa cuba mencipta prosedur tersimpan untuk memasukkan data pukal menggunakan arahan INSERT PUKAL, anda mungkin menghadapi ralat. Satu ralat sedemikian berlaku apabila cuba menetapkan pembolehubah laluan fail kepada parameter nama fail dalam prosedur yang disimpan.

Dalam pertanyaan INSERT PUKAL biasa, menentukan laluan fail sebagai rentetan berfungsi dengan betul:

BULK INSERT ZIPCodes 
FROM  'e:-digit Commercial.csv' 
WITH 
( 
     FIRSTROW = 2 ,
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
)

Walau bagaimanapun, apabila cuba mencipta prosedur tersimpan dengan laluan fail berubah-ubah, anda mungkin menghadapi ralat:

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

Sintaks salah berhampiran '@filepath' dan 'with'

Ralat ini berlaku kerana arahan BULK INSERT tidak menyokong laluan fail sebagai pembolehubah. Untuk menyelesaikan isu ini, anda boleh sama ada:

  • Kod keras laluan fail terus ke dalam kod prosedur yang disimpan.
  • Gunakan SQL dinamik untuk membina dan melaksanakan pernyataan INSERT PUKAL dengan fail yang dikehendaki laluan.

Menggunakan Dynamic SQL untuk Membina INSERT PUKAL Kenyataan

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

Pendekatan ini membolehkan anda mengekalkan fleksibiliti menggunakan laluan fail yang berbeza sambil memanfaatkan prosedur tersimpan untuk sisipan pukal.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Masalah Sisipan Pukal Ralat Prosedur Tersimpan Apabila Menggunakan Laluan Fail Boleh Ubah?. 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