0

我想以如下方式使用计数器:

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 命令中工作的建议

4

3 回答 3

0

您不能将EXEC它们作为EXEC在其自己的范围内运行,因此变量标识符没有意义。

您可以改为将它们声明为ints,将它们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
于 2012-10-04T11:26:22.080 回答
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) + ...
于 2012-10-04T11:24:17.197 回答
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
于 2012-10-04T11:34:19.470 回答