这是一个完全有效的 SQL 查询,并且可以很好地工作(例如)Microsoft SQL Server 2014
:
with t as (select 'a' as attr) select * from t
它返回a
,当然可以简化它并删除with
部分,但这不是重点,重点是找出一个说明需求/问题的最小示例。我可以将其中的一部分打包为 UDF:
CREATE PROCEDURE x(@__employee_id uniqueidentifier)
AS
RETURN (select 'a' as attr);
如何打包具有with
块的查询?我的目标是实现以下目标:
CREATE PROCEDURE x (@__employee_id uniqueidentifier)
AS
RETURN (
with t as (select 'a' as attr) select * from t
);
但是sql server
不喜欢它,触发错误:
Msg 156, Level 15, State 1, Procedure x, Line 4 [Batch Start Line 0]
Incorrect syntax near the keyword 'with'.
你正在混合程序和功能
对于 UDF,您的语法应该是
CREATE 或 alter function x (@__employee_id uniqueidentifier) 返回表 AS RETURN ( with t as (select 'a' as attr) select * from t );
按照如何从存储过程返回表中的建议删除
return
关键字: