以下の手順で見つけることができます。私はわずか149のストアドプロシージャでDBをテストし、フェッチするのに1分の時間がかかりました。
ここでは、ストアドプロシージャ名をobject_DEFINITION関数に渡して、この名前を持つプロシージャ定義が使用されていることを知ります。
DECLARE @TAB_SP TABLE(ID INT IDENTITY, OBJECTID int, NAME VARCHAR(250))
DECLARE @TAB_SP_DEPENDENCY TABLE (ID INT IDENTITY, NAME VARCHAR(250), SP_COUNT INT)
INSERT INTO @TAB_SP
select object_id,NAME from sys.objects WHERE type='P'
DECLARE @MIN INT =1, @MAX INT = (SELECT MAX(ID) FROM @TAB_SP), @SP_NAME VARCHAR(250)
WHILE (@MIN<[email protected])
BEGIN
SELECT @SP_NAME=NAME FROM @TAB_SP WHERE ID= @MIN
INSERT INTO @TAB_SP_DEPENDENCY
SELECT @SP_NAME,COUNT(DISTINCT object_id) FROM SYS.OBJECTS
WHERE OBJECT_DEFINITION(object_id) LIKE '%'[email protected]_NAME+'%'
SET @[email protected]+1
END
SELECT * FROM @TAB_SP_DEPENDENCY
この結果、spと関数のリストではない2行になります。次の結果はobject_id \tで、NAMEの値は {1803153469,\t sp_MSrepl_startup} { 1819153526、\t sp_MScleanupmergepublisher}です。 –