参数化动态where子句

时间:2020-03-16 18:21:18

标签: sql sql-server

DECLARE @Query NVARCHAR(MAX)<br />
DECLARE @Count NVARCHAR(MAX)<br />
SET @Query =' AND IsActive=1'
SET @Count=(SELECT COUNT(Id) FROM tbl_Id WHERE Id='9' + @Query)<br />
SELECT @Count

问题是@Count始终返回零,但是如果我从查询中删除@Query,则它运行正常。

1 个答案:

答案 0 :(得分:1)

让我们看看。您有一个WHERE子句,它指定:

WHERE id = '9 AND IsActive = 1'

对于名为id的列来说,这似乎是一个非常奇怪的值,因此我对查询没有找到任何内容感到惊讶。

您似乎想要动态SQL:

SET @Query = '
SELECT @Count = COUNT(*)
FROM tbl_id
WHERE id = ''9''
';

SET @Count = @Query + ' AND IsActive = 1';

EXEC sp_executesql @query,
                   N'@Count int output',
                   @Count=@Count;
相关问题