我想给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是否可能?
我想给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条答案
按热度按时间r8uurelv1#
在sql server中,您不能像在问题中所写的那样使用此语法。
只需引用cte本身,就可以使用不带变量的计算值。像这样:
j13ufse22#
这在sql server中是明确不允许的。查询要么返回结果集,要么(以独占方式)指定变量,但不能同时指定两者。
我确实想知道为什么您会在这个示例中使用CTE或变量。一个简单的子查询似乎足够简单:
sql server中的CTE不提供性能优势。在这种情况下,我看不出使用它们有什么“代码清晰”的好处。
ssm49v7z3#
不,不可能在cte查询定义中填充变量。
cte查询定义必须返回一个结果集,在t-sql-a中不可能同时返回这两个结果集
select
语句可以返回结果集或填充变量,但不能同时返回结果集和填充变量。因此,不可能在公共表表达式查询中填充变量。
qvtsj1bj4#
你可以用
SUBQUERY
而不是使用Recursive CTE
```SELECT * FROM MYTBL2 M
INNER JOIN(
SELECT COUNT(ID) AS MYQTY FROM MYTBL) S ON M.QTY=S.MYQTY