解決「@RowFrom」和「@RowTo」全域輸入參數的編譯錯誤
在儲存過程中,宣告全域參數是在程序中使用它們是必要的。但是,當使用“Exec(@sqlstatement)”在預存程序中執行已編譯的SQL 查詢時,如果“@RowFrom”或“@RowTo”輸入參數為“必須聲明標量變數'@RowFrom'”,則可能會出現錯誤未正確聲明或使用。
提供的錯誤訊息表明「@RowFrom」變數尚未聲明。若要解決此問題,請在 SQL 查詢中引用「@RowFrom」和「@RowTo」之前,在預存程序中明確宣告「@RowFrom」和「@RowTo」標量變數。
此外,當嘗試將「@RowTo」的值指派給使用串聯的新變量,請確保變數類型已正確轉換。不要使用錯誤的語法
SET @Rt = ' + @RowTo
使用正確的語法將「@RowTo」轉換為字串:
SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo)
現代版本的SQL Server 支援CONCAT() 函數,該函數簡化了這些操作:
SET @sql = N'SELECT ' + CONVERT(varchar(12), @RowTo) + ' * 5';
但是,為了更好地防止SQL 注入,建議使用參數化SQL語句的串聯。這涉及將輸入參數明確傳遞給 SQL 查詢,如下例所示:
SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;'; EXEC sys.sp_executesql @sql, N'@RowFrom int, @RowTo int', @RowFrom, @RowTo;
以上是如何修復在預存程序中使用全域輸入參數時出現「必須宣告標量變數'@RowFrom'」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!