如何表列出預存程序(Stored Procesure)中用到了哪一些資料表呢?

如何表列出預存程序(Stored Procesure)中用到了哪一些資料表呢?

今天在FB看到一位朋友提到他要爬出SP中用到了哪一些

Table,很有興趣爬了一些文。稍加整理爬到的做法

 

其一 : 利用SQL預設的sp_depends 預存程序

語法如下

USE AdventureWorks2012;
GO
EXEC sp_depends @objname = N'uspGetBillofMaterials' ;

 

執行結果如下

image


 

 

其二 : 利用SQL的sys.sysdepends資料表搭配sys.objects來寫TSQL

https://msdn.microsoft.com/zh-tw/library/ms190325(v=sql.120).aspx

語法如下

SELECT 
o.name AS proc_name, oo.name AS table_name,c.name as column_name
ROW_NUMBER() OVER(partition by o.name,oo.name ORDER BY o.name,oo.name) AS row
FROM sysdepends d 
INNER JOIN sysobjects o ON o.id=d.id
INNER JOIN sysobjects oo ON oo.id=d.depid
INNER JOIN SYS.COLUMNS C ON C.object_id=d.depid and C.column_id=d.depnumber
WHERE o.xtype = 'P'

 

執行結果如下,這語法會表列出所有SP中用到的Table及Column。

image

 

 

其三 : 利用SQL的sys.syscomments資料表搭配sys.objects來寫TSQL

https://msdn.microsoft.com/zh-tw/library/ms186293(v=sql.120).aspx

語法如下

SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%tablename%'

 

執行結果如下,這語法會表列出該資料表被哪一些資料庫物件

(例如View、Function、Stored Procedure)關聯。

image

 

 

我是ROCK

rockchang@mails.fju.edu.tw