[Database][SQL Server] 查詢 stored procedure 的中關鍵字

熱門文章 (Popular Post)

Posted by : Duran Hsieh 3月 25, 2014


測試環境:SQL Server 2012

參考來源有更詳盡的介紹:
參考來源:http://paladinprogram.blogspot.tw/2010/08/sql-server-store-procedure.html



感謝某專案用到大量的stored procedure(預存程序)....

在除錯或開發新功能的時候,看著奇怪的預存程序命名,讓人不知道這些東西做甚麼用的,
常常會發生下面這些事情:

1.每次從源頭程式碼追起,浪費不少時間;
2.知道這功能相關的資料表或檢視表,但不知道是哪個預存程序在執行;

在相關開發環境,如eclipse與visual studio都有強大的查詢功能與參考查詢功能,
唯獨在SQL Server Management studio中一直在土法煉鋼追code,上星期追完程式碼下星期忘記是哪一隻程式,無形間浪費了許多時間...
--


GOOGLE查到了參考研發紀錄簿的內容,使用下列語法:

SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%key_word%'
AND ROUTINE_TYPE = 'PROCEDURE';

INFORMATION_SCHEMA.ROUTINES是系統提供的檢視表(view),
關鍵字只需要查詢ROUTINE_DEFINITION即可,
比較進階查詢欄位為ROUTINE_TYPE,能查 PROCEDURE / FUNCTION (預存程序/函式)。
--


研發紀錄簿也提到,INFORMATION_SCHEMA.ROUTINES檢視表也是由其他資料表或檢視表組成,下列為較原始,且功能相同的語法:

SELECT distinct sys.sysobjects.name, sys.sysobjects.type
FROM sys.sysobjects INNER JOIN syscomments
ON sys.sysobjects.id = sys.syscomments.id
WHERE sys.syscomments.text LIKE '%key_word%'
AND sys.sysobjects.type = 'P'
ORDER BY sys.sysobjects.NAME

關鍵字只需要查詢 sys.syscomments.text 欄位,
進階查詢欄位為sys.sysobjects.type,其類型可分為:

P:stored procedure (預存程序)
FN:scalar function (純量值函數)
IF / TF:資料表值函式或回傳結果(我未確認)
V:view (檢視表)
--


下面我們立刻來測試看看:


立刻找到相關預存程序,節省了不少時間!!


--
後續註記:
因為目前沒有使用到,暫且筆記可能會發生的問題:
使用INFORMATION_SCHEMA.ROUTINES查詢有字數限制,
詳細內容請參考研發紀錄簿與 Madhivanan 部落格查詢。

--
如果覺得文章不錯,請幫忙點選廣告,
謝謝!


Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Duran Hsieh @ Matsurigoto - Date A Live - Powered by Blogger - Designed by Johanes Djogan -