Вот статья о том, как создать UDF, которая будет делать это.Он использует таблицы sysobjects и syscomments, как вы предложили.
http://www.eggheadcafe.com/community/aspnet/13/12562/list-sql-stored-procedure.aspx
Вот SQL для UDF:
CREATE FUNCTION dbo.uf_FindProcedureDependencies(@ProcName varchar(256))
RETURNS @blah TABLE (depth tinyint not null,
tree varchar(7700) COLLATE SQL_Latin1_General_CP437_BIN not null,
objectname varchar(256) COLLATE SQL_Latin1_General_CP437_BIN not null,
dependencytype varchar(16) COLLATE SQL_Latin1_General_CP437_BIN not null)
AS
BEGIN
DECLARE @depth tinyint
SELECT @depth = 1
INSERT @blah (depth, tree, objectname, dependencytype)
SELECT DISTINCT @depth, @ProcName + ' -> ' + so2.name, so2.name, 'stored procedure' FROM
sysobjects so1, syscomments sc1, sysobjects so2, syscomments sc2 WHERE
so1.id = sc1.id AND so2.id = sc2.id AND so1.id <> so2.id AND so1.type = 'P' AND so2.type = 'P'
AND so1.name = @ProcName AND REPLACE(sc1.text,so1.name,'') LIKE '%EXEC%' + so2.name + '%'
WHILE (@@ROWCOUNT > 0)
BEGIN
SET @depth = @depth + 1
INSERT @blah (depth, tree, objectname, dependencytype)
SELECT DISTINCT @depth, b.objectname + ' -> ' + so2.name, so2.name, 'stored procedure' FROM
sysobjects so1, syscomments sc1, sysobjects so2, syscomments sc2, @blah b WHERE
so1.id = sc1.id AND so2.id = sc2.id AND so1.id <> so2.id AND so1.type = 'P' AND so2.type = 'P'
AND so1.name = b.objectname AND REPLACE(sc1.text,so1.name,'') LIKE '%EXEC%' + so2.name + '%'
AND b.depth = @depth - 1
END
RETURN
END