if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetObjectParents]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetObjectParents]
GO

CREATE FUNCTION GetObjectParents (@ObjID int, @MaxLevel int = 100)
RETURNS @retObjs TABLE (id int)
-- возвращает таблицу с кодами (в дальнейшем можно дополнить при необходимости) родительских объектов всех уровней
AS
BEGIN
  DECLARE @Level int
  IF @MaxLevel > 100 SET @MaxLevel = 100
  IF @MaxLevel < 1     SET @MaxLevel = 1
  SET @Level = 1
  declare @ParentID int
  declare @R int
  insert @retObjs values(@ObjID)
  select @ParentID = IsNull(Код_объекта_владельца,0) from Объект where Код_объекта = @ObjID
  while (@Level <= @MaxLevel) AND (@ParentID<>0)
  begin
    insert @retObjs values(@ParentID)
    set @R = @ParentID
    select @ParentID = IsNull(Код_объекта_владельца,0) from Объект where Код_объекта = @R
    SET @Level = @Level + 1 
  end
  RETURN
END