Присвойте значение переменной внутри CTE - PullRequest
0 голосов
/ 25 мая 2020

Я хочу присвоить значение моей переменной внутри CTE и использовать его в моем следующем CTE.

Возможно ли это?

declare @TypeQty as int
;
With CTE1 as
(@TypeQty = (select Count(ID) as MyQty from MyTbl))
,CTE2 as
(select * from MyTbl2 where Qty= @TypeQty)
Select * from CTE2

Я знаю, что это возможно каким-то другим способом, но я хочу знать, возможно ли это с CTE или нет?

Ответы [ 4 ]

1 голос
/ 25 мая 2020

В SQL Server вы не можете использовать этот синтаксис, как вы написали в вопросе.

Вы можете использовать вычисленное значение без переменной, просто сославшись на сам CTE. Примерно так:

WITH
CTE1
as
(
    select Count(ID) as MyQty
    from MyTbl
)
,CTE2
as
(
    select *
    from
        MyTbl2
        INNER JOIN CTE1 ON MyTbl2.Qty = CTE1.MyQty
)
Select *
from CTE2
;
1 голос
/ 25 мая 2020

Это явно не разрешено на SQL сервере. Запрос либо возвращает набор результатов, либо (исключительно) присваивает переменные, но не то и другое.

Интересно, зачем вам использовать CTE или переменные в этом примере. Простой подзапрос кажется достаточно простым:

Select t2.*
from MyTbl2 t2
where t2.qty = (select count(*) from mytable t);

CTE в SQL Server не дает преимуществ в производительности. И я не вижу никаких преимуществ "ясности кода" в их использовании в этом случае.

0 голосов
/ 25 мая 2020

Вы можете использовать SUBQUERY вместо Recursive CTE

SELECT * FROM MYTBL2 M
INNER JOIN(
SELECT COUNT(ID) AS MYQTY FROM MYTBL) S ON M.QTY=S.MYQTY
0 голосов
/ 25 мая 2020

Нет, невозможно заполнить переменные внутри определения запроса cte.

Определение запроса cte должно возвращать набор результатов, и невозможно сделать и то, и другое в операторе T- SQL - a select может либо возвращать результирующий набор, либо заполнять переменные, но не оба одновременно.

Поэтому невозможно заполнить переменную внутри общего запроса табличного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...