Ed *_*vis 4 sql-server common-table-expression
我习惯于在 MSSQL 2008 R2 中使用公用表表达式 (CTE)。我知道语法对于它们出现的位置有点复杂,并且在普通的 T-SQL 中,在表达式之前需要一个显式的分号(或开始一个新的批处理)with。我想在用户定义的函数中使用 CTE。对于简单的情况,这有效:
create function dbo.udf_test()
returns table
with schemabinding
as
return (
with foo as (
select 5 as f
)
select f
from foo
)
Run Code Online (Sandbox Code Playgroud)
但现在我想让我的功能udf_test更复杂一些。例如在函数体内声明变量。首先,我需要显式begin并且end因为函数体将不再是单个语句。所以我尝试这样创建一个:
create function dbo.udf_test()
returns table
with schemabinding
as
begin
return (
with foo as (
select 5 as f
)
select f
from foo
)
end
Run Code Online (Sandbox Code Playgroud)
然而这给出了错误
Incorrect syntax near the keyword 'with'.
Run Code Online (Sandbox Code Playgroud)
如果表值函数比单个语句更复杂,如何在表值函数中使用 CTE return?
小智 7
CREATE FUNCTION dbo.udf_test()
RETURNS
@return TABLE
(
f int NOT NULL
)
AS
BEGIN
WITH foo AS (
SELECT 5 AS f
)
INSERT INTO @return
SELECT f
FROM foo;
RETURN;
END
Run Code Online (Sandbox Code Playgroud)