Rumah > pangkalan data > tutorial mysql > Bagaimana Mengendalikan Parameter Input Global dalam Prosedur Tersimpan T-SQL Apabila Melaksanakan SQL Dinamik?

Bagaimana Mengendalikan Parameter Input Global dalam Prosedur Tersimpan T-SQL Apabila Melaksanakan SQL Dinamik?

DDD
Lepaskan: 2024-12-15 00:07:13
asal
763 orang telah melayarinya

How to Handle Global Input Parameters in T-SQL Stored Procedures When Executing Dynamic SQL?

Masalah dengan Parameter Input Global dan Pelaksanaan SQL

Dalam prosedur tersimpan yang menyusun pertanyaan SQL dengan T-SQL dan melaksanakannya menggunakan EXEC (@sqlstatement), anda mungkin menghadapi ralat yang menyatakan "Mesti mengisytiharkan pembolehubah skalar "@RowFrom"." apabila cuba menggunakan parameter input global @RowFrom dan @RowTo dalam pembolehubah @sqlstatement.

Memahami Isu

Ralat berlaku kerana parameter @RowFrom dan @RowTo tidak dikenali dalam rentetan @sqlstatement. Ini kerana rentetan SQL tidak boleh mengakses terus pembolehubah global tanpa pengisytiharan eksplisit.

Penyelesaian: Menukar Int kepada Rentetan atau Menggunakan Parameterisasi yang Betul

Terdapat dua pendekatan untuk menyelesaikan isu ini :

  1. Tukar Int kepada Rentetan: Untuk menghantar nilai integer @RowTo sebagai rentetan, gunakan fungsi CONVERT:
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
Salin selepas log masuk
  1. Gunakan Parameterisasi yang Betul: Daripada menggabungkan nilai ke dalam rentetan SQL , gunakan pertanyaan berparameter untuk menghantar parameter input dengan selamat. Contohnya:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';

EXEC sys.sp_executesql @sql,
  N'@RowFrom int, @RowTo int',
  @RowFrom, @RowTo;
Salin selepas log masuk

Pertimbangan untuk Versi Moden

Dalam versi moden SQL, anda boleh menggunakan fungsi CONCAT untuk penggabungan rentetan:

SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
Salin selepas log masuk

Walau bagaimanapun, adalah disyorkan untuk menggunakan parameterisasi yang betul untuk mengelakkan suntikan SQL kelemahan.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Parameter Input Global dalam Prosedur Tersimpan T-SQL Apabila Melaksanakan SQL Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan