|
|
|
Old Hand
      
Group: General Forum Members
Last Login: Monday, May 06, 2013 8:47 AM
Points: 304,
Visits: 552
|
|
|
|
|
|
Forum Newbie
      
Group: General Forum Members
Last Login: Friday, May 17, 2013 7:45 AM
Points: 5,
Visits: 10
|
|
Useful, thanks!
One minor point: you've declared ObjectType as char(1), but it should be char(2) to match the xtype field in sysobjects. Functions have xtype='FN', so cause the batch to fail.
Bryan.
|
|
|
|
|
Old Hand
      
Group: General Forum Members
Last Login: Monday, May 06, 2013 8:47 AM
Points: 304,
Visits: 552
|
|
BryanR (2/26/2008) Useful, thanks!
One minor point: you've declared ObjectType as char(1), but it should be char(2) to match the xtype field in sysobjects. Functions have xtype='FN', so cause the batch to fail.
Bryan.
Great catch, thanks for the post! I went ahead and updated the code. When I wrote this, I was reverse-engineering a database with over 400 stored procedures, some of which nested 20 layers deep. I could not have done it and stayed sane without the overview that these sorts of queries provide. The unfortunate thing is the breaks in the dependency chains that SQL Server 2005 allows. I had to augment this process by querying syscomments for names of nested procedures.
Thanks, Jesse
Jesse McLain jesse@jessemclain.com www.jessemclain.com www.jessesql.blogspot.com
|
|
|
|
|
SSC-Addicted
      
Group: General Forum Members
Last Login: Saturday, May 11, 2013 8:17 AM
Points: 460,
Visits: 2,521
|
|
Good post! Another option is to use a recursive CTE that returns the entire dependency chain in a single query. I wrote such a function and the code is posted here: http://www.sqlserverandxml.com/2008/09/find-dependent-objects-recursively.html
.
|
|
|
|
|
SSC-Enthusiastic
      
Group: General Forum Members
Last Login: Wednesday, January 26, 2011 1:32 PM
Points: 146,
Visits: 327
|
|
Jacob,
I cannot find that link - did it move?
Best, Doug
|
|
|
|
|
SSC-Addicted
      
Group: General Forum Members
Last Login: Saturday, May 11, 2013 8:17 AM
Points: 460,
Visits: 2,521
|
|
|
|
|
|
UDP Broadcaster
      
Group: General Forum Members
Last Login: Monday, February 04, 2013 5:20 AM
Points: 1,491,
Visits: 733
|
|
If i more than 4 levels of nesting in the objects with dependencies the proc doesn work... any other alternatives?
For better assistance in answering your questions Click Here
|
|
|
|
|
SSC-Addicted
      
Group: General Forum Members
Last Login: Monday, May 13, 2013 6:37 PM
Points: 434,
Visits: 1,137
|
|
I know this script and thread are a few years old, but this is a very helpful dependency finder for PROCS, so I wanted to share a slight change that one of my developers made to the original script. He is not a fan of temp tables, so he used a table variable instead. Here's the T-SQL:
DECLARE @DepTree TABLE (ObjNum int identity(1,1) not null, Name varchar(1000), DependsOn varchar(1000), ObjectType char(2), DepLevel smallint)
INSERT INTO @DepTree (Name, DependsOn, ObjectType, DepLevel) SELECT DependsOn = S.Name, S.Name, ObjectType = S.XType, DepLevel = 0 FROM sys.sysobjects S WHERE S.Name = 'ENTER_YOUR_OBJECT_NAME_HERE'
DECLARE @Name varchar(1000) DECLARE @DependsOn varchar(1000) DECLARE @DepLevel smallint DECLARE @ObjNum int SET @ObjNum = 1 WHILE EXISTS(SELECT 1 FROM @DepTree WHERE ObjNum = @ObjNum) BEGIN SELECT @Name = Name, @DependsOn = DependsOn, @DepLevel = DepLevel FROM @DepTree WHERE ObjNum = @ObjNum
-- this block finds objects that the current object of interest depends on (moving _down_ the dependency chain): IF @DepLevel >= 0 INSERT INTO @DepTree (Name, DependsOn, ObjectType, DepLevel) SELECT DISTINCT S1.Name, DependsOn = S2.Name, ObjectType = S2.XType, DepLevel = @DepLevel + 1 FROM sys.sysdepends DP JOIN sys.sysobjects S1 ON S1.ID = DP.ID JOIN sys.sysobjects S2 ON S2.ID = DP.DepID WHERE S1.Name = @DependsOn ORDER BY 1, 3, 2
-- this block finds objects that depend on the current object of interest (moving _up_ the dependency chain): IF @DepLevel <= 0 INSERT INTO @DepTree (Name, DependsOn, ObjectType, DepLevel) SELECT DISTINCT S2.Name, DependsOn = S1.Name, ObjectType = S2.XType, DepLevel = @DepLevel - 1 FROM sys.sysdepends DP JOIN sys.sysobjects S1 ON S1.ID = DP.DepID JOIN sys.sysobjects S2 ON S2.ID = DP.ID WHERE S1.Name = @Name ORDER BY 1, 3, 2
SET @ObjNum = @ObjNum + 1 END
SELECT * FROM @DepTree
|
|
|
|
|
Forum Newbie
      
Group: General Forum Members
Last Login: Monday, September 10, 2012 9:37 PM
Points: 1,
Visits: 3
|
|
Hey Jacob, I just happen to look into your code. It seems like, as you are using sys.sysdepends, it may not work if the referenced object is created after referencing object. Can you please provide some other solution? Thanks' Milan
|
|
|
|