-- получаем ближайшего предка вверх по дереву (начиная с себя), у которого списко осуществляющих деятельность не пуст
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetUsersSource]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetUsersSource]
GO
create function GetUsersSource(@ObjectID integer)
returns integer
as
begin
  declare @res integer
  while (@ObjectID is not NULL)
  begin
    set @res = @ObjectID
    set @ObjectID = NULL    
    if not exists(select 1 from PowerObjectUsers where PowerObjectID = @res)
      select @ObjectID = Код_объекта_владельца from Объект where Код_объекта = @res   
  end
  return @res
end
