我浏览了无数有关在sql脚本中声明/设置变量的文章。但大多数似乎涉及语法错误或使用exec命令。我尝试执行的脚本非常简单-因此我很难理解为什么我不能设置值。
这是SQL:
declare @counter int = 1,
@batchSize int = 100000,
@tableRows int,
@totalBatches int;
set @tableRows= (select count(distinct chFileVersionID) from IRISDocuments)
set @totalBatches = (ceiling((@tableRows / @batchSize)));
--print some stuff
while @counter <= @totalBatches
begin
. . . loop logic that only uses @counter variable for incrementing
end
我得到的错误是
必须声明标量变量“ @tableRows”
在上面直接声明。我尝试使用select语句设置值,以及分别声明每个变量,并在同一语句中声明和设置值无济于事。
答案 0 :(得分:0)
上面的方法实际上有效(我的意思是在没有WHILE循环的情况下进行测试)。
2个错误的可能来源,如果变量没有如上使用:
例如:
declare @counter int = 1,
@batchSize int = 100000,
@tableRows int = 10000000000000,
@totalBatches int = (ceiling((@tableRows / @batchSize)))
这将不起作用并产生错误-语句中的执行顺序不是逐行的,因此您无法为@totalBatches赋值,因为此时尚未实现@tableRows。
例如:
declare @counter int = 1,
@batchSize int = 100000,
@tableRows int,
@totalBatches int;
SELECT @counter, @batchSize, @tableRows, @totalBatches int
GO
SELECT @counter, @batchSize, @tableRows, @totalBatches int
第二个SELECT会抛出错误。