Esta é uma consulta SQL perfeitamente válida e funciona bem (por exemplo) em Microsoft SQL Server 2014
:
with t as (select 'a' as attr) select * from t
ele retorna a
, certamente pode-se simplificá-lo e descartar a with
parte, mas esse não é o ponto, o ponto é descobrir um menor exemplo que ilustre a necessidade/problema. Eu posso empacotar parte dele como um UDF:
CREATE PROCEDURE x(@__employee_id uniqueidentifier)
AS
RETURN (select 'a' as attr);
Como posso empacotar uma consulta que tem with
bloco? Meu objetivo é conseguir algo como:
CREATE PROCEDURE x (@__employee_id uniqueidentifier)
AS
RETURN (
with t as (select 'a' as attr) select * from t
);
porém sql server
não gosta, disparando um erro:
Msg 156, Level 15, State 1, Procedure x, Line 4 [Batch Start Line 0]
Incorrect syntax near the keyword 'with'.
você está misturando procedimento e função
para UDF, sua sintaxe deve ser
CREATE ou alter function x (@__employee_id uniqueidentifier) retorna a tabela AS RETURN ( com t as (selecione 'a' como attr) selecione * de t );
Solte a palavra-
return
chave conforme sugerido em como retornar uma tabela de um procedimento armazenado :