  -- Имеется ли зацикливание родителей данного объекта

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[HasOwnerCycling]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[HasOwnerCycling]
GO
CREATE FUNCTION HasOwnerCycling(@ObjectID int)
returns bit
begin
  declare @Owners table(ID int)
  insert into @Owners VALUES (@ObjectID)
  declare @Flag bit 
  set @Flag = 0
  declare @CurParentID int
  declare @CurChildID int
  select @CurParentID = IsNull(Код_объекта_владельца,0) from Объект where Код_объекта = @ObjectID
  if exists(select ID from @Owners where ID = @CurParentID) set @Flag = 1
  while (@Flag = 0) AND (@CurParentID<>0)
  begin
    insert into @Owners VALUES (@CurParentID)
    set @CurChildID = @CurParentID
    select @CurParentID = IsNull(Код_объекта_владельца,0) from Объект where Код_объекта = @CurChildID
    if exists(select ID from @Owners where ID = @CurParentID) set @Flag = 1
  end
  return (@Flag)
end