我需要做这样的事情,但我无法找到正确的语法。
ALTER function [dbo].[FN_ObtenerArbolEmpresa] (@empresaID int)
returns table
as
BEGIN
IF (@empresaID = 0)
begin
RETURN select id_empresa_hijo from empresa_x_empresa
end
ELSE
begin
return
(
WITH temp
AS (
-- anchor
SELECT id_empresa_hijo, id_empresa_padre
FROM empresa_x_empresa with(nolock)
WHERE id_empresa_padre = @empresaID
UNION ALL
--recursive member
SELECT t.id_empresa_hijo, t.id_empresa_padre
FROM empresa_x_empresa AS t with(nolock)
JOIN temp AS a
ON t.id_empresa_padre = a.id_empresa_hijo
)
(
SELECT id_empresa_hijo FROM temp
union
select @empresaID
)
end
实际上我只想在@empresaID = 0时避免递归。
答案 0 :(得分:1)
您需要定义要返回的表。 例如:
ALTER FUNCTION [dbo].[Split](@sText varchar(8000), @sDelim varchar(20) = '')
RETURNS @retArray TABLE (idx smallint Primary Key, value varchar(2000))
AS
BEGIN
...
答案 1 :(得分:0)
您的查询结尾处似乎缺少END。你有一个结束函数,但没有一个结束ELSE语句。