Membolehubah Hantaran untuk Sisipan Pukal dalam T-SQL
Dalam T-SQL, pernyataan BULK INSERT membenarkan data diimport daripada luaran fail ke dalam jadual. Walau bagaimanapun, jika menggunakan pembolehubah rentetan sebagai sumber data, ralat mungkin berlaku.
Masalah:
Kod T-SQL berikut gagal dengan ralat (sebahagian daripada prosedur tersimpan):
DECLARE @CSVfile nvarchar(255); SET @CSVfile = N'T:\x.csv'; BULK INSERT [dbo].[TStagingTable] -- FROM N'T:\x.csv' -- This line works FROM @CSVfile -- This line fails WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', FIRSTROW = 2 )
Ralat mesej:
Incorrect syntax near the keyword 'with'.
Sebab:
Dalam pernyataan BULK INSERT, klausa FROM memerlukan rentetan literal sebagai laluan fail input. Apabila menggunakan pembolehubah, ia mesti dihantar ke rentetan literal.
Penyelesaian:
Untuk menghantar pembolehubah @CSVfile ke rentetan literal, gunakan T dinamik berikut -SQL syntax:
declare @q nvarchar(MAX); set @q= 'BULK INSERT [TStagingTable] FROM '+char(39)+@CSVfile+char(39)+' WITH ( FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'', FIRSTROW = 1 )' exec(@q)
Kod ini menjana pernyataan SQL dinamik yang menghantar @CSVfile kepada rentetan literal dalam FROM klausa, menyelesaikan isu dan membenarkan sisipan pukal berjaya.
Atas ialah kandungan terperinci Bagaimana untuk Menghantar Pembolehubah dengan Betul untuk Sisipan Pukal dalam T-SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!