我想以类似下面的方式使用计数器:
exec
('begin insert into ' + @temp07 + ' (FileID,FileName)
Select aof_id,aof_fileName from PaFi07(' + @partId + ');
sp_executesql @sqlCounter, N'@intCount int output, @intConst int, @intCount = @intCount output, @intConst = @intConst
end')
那我怎么能让这个计数器工作呢?
任何有关计数器在此EXEC命令内工作的建议 THANX
答案 0 :(得分:0)
您不需要exec
:
set @inCount = @intCount + @intConst
如果你想使用exec
,你可以使用字符串中变量的名称,而不是值:
exec('set @inCount = @intCount + @intConst')
对于新问题;您可以将值连接到字符串中:
exec
('begin insert into ' + @temp07 + ' (FileID,FileName)
Select aof_id,aof_fileName from PaFi07(' + @partId + ');
sp_executesql @sqlCounter, N'@intCount int output, @intConst int, @intCount = ' + @intCount + ' output, @intConst = ' + @intConst + ' end')
如果它们是数值,则需要投射它们:
... + cast(@intCount as varchar) + ...
答案 1 :(得分:0)
你不能EXEC
他们EXEC
在自己的范围内运行,所以变量标识符没有意义。
您可以将它们声明为int
s,将它们与语句字符串一起传递给sp_executesql
并将结果作为输出返回;
declare @sql nvarchar(256) = 'SET @intCount = @intCount + @intConst'
EXEC sp_executesql @sql,
N'@intCount int output, @intConst int',
@intCount = @intCount output,
@intConst = @intConst
select @intCount
>6
答案 2 :(得分:0)
您的代码段中有几个错误: 首先,您将变量声明为varchar(10),而您打算将它们用作数字。它们应该声明为smallint,int或bigint。
然后,您使用这些varchar变量组成一个字符串,并尝试将1添加到存储在@inCount中的值,并添加数字1。
由于你的变量是字符串而不是数字,+符号会尝试连接它们。
要了解您的错误,首先,您应该将数字1转换为字符串,编写EXEC,如下所示:
exec ('SET ' + @intCount + ' = ' + @intCount + '1')
完成后,只需删除EXEC并将连接的字符串分配给新的字符串变量。所以:
DECLARE @composedQuery varchar(1000)
SET @composedQuery = 'SET ' + @intCount + ' = ' + @intCount + '1'
SELECT @composedQuery
你会看到这样的结果:
SET 5 = 51
当然,这不是你打算用EXEC执行的,不是吗? :)
在其他答案中已经给出了正确的解决方案。我重写了整个片段:
declare @intCount int
declare @intConst int
set @intCount = 5
set @intConst = 1
SET @intCount = @intCount + 1
--OR
SET @intCount = @intCount + @intConst