SQL:在CTE内选择期间设置变量

时间:2014-01-11 23:45:41

标签: sql sql-server-2008 common-table-expression

我正在尝试在CTE中设置变量值,如下所示:

DECLARE @var INT;

WITH cte AS
(
    SELECT @var = column FROM ...
)

但是我收到以下错误:Incorrect syntax near '='

这是不可能的,或者在CTE内部执行时语法是否会改变?

2 个答案:

答案 0 :(得分:3)

CTE更像是VIEW而不是存储过程。它似乎不是正确的语法 - 因为你无法在CTE中设置变量 - 据我所知。

答案 1 :(得分:1)

不完全为变量赋值,但也许你可以这样做......

DECLARE @T TABLE (ID INT, VALUE INT)
INSERT INTO @T VALUES (1,100),(2,200),(3,300),(4,400),(5,500)

;WITH Variable (A)    --<-- The value you wanted to store in a variable
AS
  ( 
    SELECT  AVG(VALUE)
    FROM @T
  ),
CTE (ID , Value)   --<-- Actual CTE where you wanted to use the value
AS  
  (
  SELECT * 
  FROM @T 
  WHERE VALUE > ( SELECT A      --<-- Use that value here 
                  FROM Variable)
  )
SELECT * 
FROM CTE