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
Lepaskan: 2024-12-25 09:06:10
asal
467 orang telah melayarinya

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

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

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

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 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