gpt4 book ai didi

sql - 必须声明标量变量

转载 作者:行者123 更新时间:2023-12-01 17:24:56 25 4
gpt4 key购买 nike

@RowFrom int

@RowTo int

都是存储过程的全局输入参数,因为我使用 T-SQL 编译存储过程中的 SQL 查询,然后在存储过程末尾使用 Exec(@sqlstatement)为了显示结果,当我尝试在执行的 @sqlstatement 变量中使用 @RowFrom@RowTo 时,它会出现此错误..否则工作正常..请帮忙。

"Must declare the scalar variable "@RowFrom"."
<小时/>

此外,我尝试在 @sqlstatement 变量中包含以下内容:

'Declare @Rt int'
'SET @Rt = ' + @RowTo

但是 @RowTo 仍然没有将其值传递给 @Rt 并生成错误。

最佳答案

不能将 int 连接到字符串。而不是:

SET @sql = N'DECLARE @Rt int; SET @Rt = ' + @RowTo;

您需要:

SET @sql = N'DECLARE @Rt int; SET @Rt = ' + CONVERT(VARCHAR(12), @RowTo);

帮助说明这里发生的事情。假设 @RowTo = 5。

DECLARE @RowTo int;
SET @RowTo = 5;

DECLARE @sql nvarchar(max);
SET @sql = N'SELECT ' + CONVERT(varchar(12), @RowTo) + ' * 5';
EXEC sys.sp_executesql @sql;

为了将其构建为字符串(即使最终它是一个数字),我需要将其转换。但正如你所看到的,执行时该数字仍然被视为数字。答案是 25,对吗?

在您的情况下,您可以使用适当的参数化而不是使用连接,如果您养成这种习惯,您将在某些时候暴露于 SQL 注入(inject)(请参阅 thisthis :

SET @sql = @sql + ' WHERE RowNum BETWEEN @RowFrom AND @RowTo;';

EXEC sys.sp_executesql @sql,
N'@RowFrom int, @RowTo int',
@RowFrom, @RowTo;

关于sql - 必须声明标量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com