在WITH表达式(SQL Server)中声明变量?

gra*_*ady 15 sql-server

有没有办法在WITH表达式中定义变量?就像是:

;WITH SomeName AS ( 
    declare @somevar decimal
    set @somevar = ...
    SELECT ....)
Run Code Online (Sandbox Code Playgroud)

可能?

Ada*_*Dev 20

不,您需要在CTE之外声明/设置它

DECLARE @somevar DECIMAL
;WITH SomeName AS (SELECT....)
SELECT @somevar = ...
FROM SomeName
Run Code Online (Sandbox Code Playgroud)

每个MSDN:

CTE_query_definition
指定SELECT语句,其结果集填充公用表表达式.CTE_query_definition的SELECT语句必须满足与创建视图相同的要求,但CTE无法定义另一个CTE.


Bri*_*win 6

我不得不多次使用以下方法作为解决方法(例如,在 t-sql 中使用 R-Server 作为 input_data_1 表达式;请参阅https://learn.microsoft.com/en-us/sql/高级分析/教程/quickstart-r-inputs-and-outputs?view=sql-server-2017)。下面举例说明:

WITH ctename (varname) as (
    SELECT MAX(somevar) FROM sometable
)
SELECT *
    FROM someothertable a
    JOIN ctename b on 1=1
    WHERE a.col1 > b.varname;
Run Code Online (Sandbox Code Playgroud)