我试图在表中计算具有特定值的行,如果计数为0,则在表中添加一个值。此计数是存储过程中的局部变量。
我正在动态构建SQL并将SQL语句存储到nvarchar
变量中。
然后,使用EXEC
我按照以下方式运行此SQL,希望填充count变量。
但它不起作用。
DECLARE @qry NVARCHAR(max)
DECLARE @count INT
-- building @qry will result as follows
@qry = SELECT @count = COUNT(*) FROM aTable WHERE (col1 = @col1 AND ...)
@count = EXEC @qry
IF @count = 0
BEGIN
-- carry on with adding
END
答案 0 :(得分:1)
在你的sql中,为什么你要通过EXEC执行查询,因为你所需的输出已经在@count变量中,所以在你的情况下不需要。 请参考以下语法。
DECLARE @qry Numeric
DECLARE @count INT
-- building @qry will result as follows
SELECT @count = COUNT(*) FROM aTable WHERE (col1 = @col1 AND ...)
IF @count = 0
BEGIN
-- carry on with adding
END
答案 1 :(得分:0)
我认为@qry需要是一个执行字符串,而不是select的结果,如下所示:
DECLARE @qry NVARCHAR(max);
DECLARE @count INT;
-- building @qry will result as follows
SET @qry = 'SELECT COUNT(*) FROM aTable WHERE (col1 = @col1 AND ...)';
SET @count = exec @qry;
答案 2 :(得分:0)
如果要动态构建查询,则需要sp_executesql
。尝试像
-- building @qry will result as follows
@qry = 'SELECT @count = COUNT(*) FROM aTable WHERE (col1 = @col1 AND ...)'
EXEC sp_executesql @qry, N'@count INT OUTPUT', @count OUTPUT;
--Do whatever you want with @count...
来源:Aaron Bertrand的回答here和sp_executesql解释..