使用exec时增加计数器

时间:2012-10-04 11:18:38

标签: sql sql-server sql-server-2008 sql-server-2005

我想以类似下面的方式使用计数器:

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

3 个答案:

答案 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