我习惯于在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
)
但现在我想让我的函数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
然而,这会产生错误
Incorrect syntax near the keyword 'with'.
如果它比单个return
语句更复杂,我如何在表值函数中使用CTE?
答案 0 :(得分:3)
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