SQL 服务器查询的动态过滤器

Dynamic Filter to the SQL Server Query

我有如下查询

WITH TempResult AS(
SELECT AccessionNumber FROM [CASE]
UNION ALL
SELECT AccessionNumber FROM CaseReassign), 
TempCount AS (SELECT COUNT(AccessionNumber) AS MaxRows FROM TempResult)
SELECT * FROM TempResult, TempCount

这可以很好地获取行及其计数。但当 有人可以帮助我如何为此 select 查询动态添加过滤器吗?举例来说,我需要类似下面的东西,但它会抛出错误 "Common Table Expression defined but not used"

DECLARE @filter nvarchar(max);
SET @filter = 'WHERE AccessionNumber LIKE ''%Case%'''

DECLARE @sql nvarchar(max);

WITH TempResult AS(
SELECT AccessionNumber FROM [CASE]
UNION ALL
SELECT AccessionNumber FROM CaseReassign), 
TempCount AS (SELECT COUNT(AccessionNumber) AS MaxRows FROM TempResult)

SELECT  @sql = 'SELECT * FROM TempResult, TempCount ' + @filter

EXEC sp_executesql @sql

动态 SQL 定义了它自己的范围。 在动态 SQL 中,您无法访问局部变量。据我所知,这也算作本地定义的 CTE。

因此我认为您需要将 CTE 纳入动态 SQL。