SQL函数中的IF语句

时间:2015-06-04 14:22:36

标签: sql tsql

我需要做这样的事情,但我无法找到正确的语法。

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时避免递归。

2 个答案:

答案 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语句。