Динамический фильтр к запросу SQL Server - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть запрос, подобный приведенному ниже

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

, который отлично работает при получении строк и их количества.Но когда может кто-нибудь помочь мне в том, как динамически добавить фильтр к этому запросу?скажем, например, мне нужно что-то вроде ниже, но он выдает ошибку «Общее выражение таблицы определено, но не используется»

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

1 Ответ

0 голосов
/ 20 сентября 2018

Динамический SQL определяет свою собственную область.В динамическом SQL вы не можете получить доступ к локальным переменным.Насколько я знаю, это также относится к локально определенным CTE.

Так что я думаю, вы должны поместить свой CTE в динамический SQL, я думаю.

...