解决“@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中文网其他相关文章!