Penggantian Pembolehubah dalam Pertanyaan OPENROWSET
Pertanyaan ini menghadapi ralat apabila cuba membenamkan pembolehubah (@ID) secara dinamik ke dalam pernyataan OPENROWSET:
SELECT * FROM OPENROWSET( 'SQLNCLI', 'DRIVER={SQL Server};', 'EXEC dbo.sProc1 @ID = ' + @id )
Mesej ralat menunjukkan sintaks yang salah berhampiran ' ', menyerlahkan percubaan untuk menggabungkan rentetan dengan pembolehubah.
Mengapa Ralat Berlaku
OPENROWSET tidak membenarkan penggantian pembolehubah langsung. Argumen rentetan yang dihantar kepada pembekal dinilai secara verbatim, menghalang penilaian dan kemasukan pembolehubah.
Penyelesaian: Dynamic SQL
Untuk membenamkan pembolehubah dalam pertanyaan OPENROWSET, anda mesti gunakan teknik SQL dinamik:
Berikut ialah contoh:
Declare @ID int Declare @sql nvarchar(max) Set @ID=1 Set @sql='SELECT * FROM OPENROWSET( ''SQLNCLI'', ''DRIVER={SQL Server};'', ''EXEC dbo.usp_SO @ID =' + convert(varchar(10),@ID) + ''')' -- Print @sql Exec(@sql)
Dengan menggunakan SQL dinamik, anda boleh membina rentetan pembekal pada masa jalan dan sertakan nilai pembolehubah secara dinamik.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Penggantian Pembolehubah dalam Pertanyaan OPENROWSET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!