Sql 动态生成select语句并使用它填充存储过程变量
我试图获取表中具有特定值的行的计数,如果计数为0,则在表中添加一个值。此计数是存储过程中的局部变量 我正在动态构建SQL,并将SQL语句存储到Sql 动态生成select语句并使用它填充存储过程变量,sql,stored-procedures,Sql,Stored Procedures,我试图获取表中具有特定值的行的计数,如果计数为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
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
在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
我认为@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;
如果要动态生成查询,则需要
sp\u 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...
来源:亚伦·伯特兰的回答和解释。它在什么方面不起作用?你有错误吗?您得到的结果是否与您预期的不同?我相信这应该会有所帮助:尝试使用
@count
作为OUT
参数进行操作,可能会有所帮助。在@count=EXEC@qry
时,它会给我错误。“@count”附近的语法不正确。如果未执行动态sql,则在之前。我猜是吧?但它不是必需的,因为您的记录计数在@count变量中可用。