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 :
SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
Pertimbangan untuk Versi Moden
Dalam versi moden SQL, anda boleh menggunakan fungsi CONCAT untuk penggabungan rentetan:
SET @sql = CONCAT(N'SELECT ', @RowTo, ' * 5');
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!