SQLServer 2005 列所有存儲過程的語句
更新時間:2008年11月25日 10:19:03 作者:
對于數(shù)據(jù)庫管理員來說,可以經(jīng)常想了解一些之前未聽說過的存儲過程,特別是無文檔類型的存儲過程?;蛟S是用這些存儲過程,能夠簡化日常的數(shù)據(jù)管理。
為了查找這些存儲過程,你可以花時間在互聯(lián)網(wǎng)搜索,查看一些你還未知道的存儲過程,也許在一兩個小時您可能會發(fā)現(xiàn)你想要...也許你很幸運(yùn)的找到,其他人在他們的文章中列出所有的存儲過程 ,函數(shù)和視圖,并介紹了如何使用這些存儲過程。
但其實(shí),您可以在一分鐘之內(nèi)就可以自己列出這些存儲過程、函數(shù)和視圖的清單!這份名單甚至包括SQL Server中所有無文檔的存儲過程。通過這個清單,你就可以確定你所想要找的存儲過程。
SQL Server 2005實(shí)際上保存了所有存儲過程的列表,包括有文檔的、無文檔的,甚至是用戶自定義的!所有這些信息,都包含在系統(tǒng)表中。最簡單的方法是使用一個系統(tǒng)視圖,特別是sys.all_objects這個視圖來查閱。
您也可以使用sys.procedures目錄視圖,但我的測試結(jié)果,發(fā)現(xiàn)這個視圖會過濾掉一些儲存過程。
您也可以使用系統(tǒng)儲存過程sp_stored_procedures返回當(dāng)前環(huán)境中的存儲過程列表 ,但這個存儲過程同樣也限制了存儲過程返回值。
通過對比,我覺得:如果想獲得SQL Server 2005中所有的儲存程序,建議使用sys.all_objects這個系統(tǒng)視圖,sys.Procedures或sp_Stored_Procedures這兩個視圖會因?yàn)槟承┪粗颍^濾掉一些內(nèi)容,造成信息不全。
存儲過程信息是存儲在各自用戶數(shù)據(jù)庫中的系統(tǒng)表中的。SQL Server 2005保存了存儲過程的唯一標(biāo)識信息,如存儲過程的名稱、創(chuàng)建時間、修改時間、是否來自微軟等等。
如何確保所有的用戶數(shù)據(jù)庫都能夠自動創(chuàng)建這些存儲過程呢?
當(dāng)SQL Server部署完成后,微軟提供的存儲過程,是保存在master數(shù)據(jù)庫中的。當(dāng)您新建一個數(shù)據(jù)庫時,master數(shù)據(jù)庫將作為模板數(shù)據(jù)庫,因此,master數(shù)據(jù)庫中的所有存儲過程將自動創(chuàng)建到你所新建的數(shù)據(jù)庫中。
如果你想創(chuàng)建一個存儲過程,并希望能夠自動分發(fā)到所有的數(shù)據(jù)庫中,你可以在master數(shù)據(jù)庫中建立該存儲過程,這樣之后新創(chuàng)建的數(shù)據(jù)庫中,將自動包含你新建的這個存儲過程; 但對于之前已經(jīng)存在的數(shù)據(jù)庫,你仍需要到每個數(shù)據(jù)庫中手動創(chuàng)建這個存儲過程。
一、列出所有的儲存過程
以下代碼列出了SQL Server 2005中存在的所有儲存過程。
USE [your_database_name_here];
GO
SELECT * FROM sys.all_objects
WHERE ([type] = 'P' OR [type] = 'X' OR [type] = 'PC')
ORDER BY [name];
GO
如果您已經(jīng)安裝了SQL Server 2005,并使用了所有的默認(rèn)設(shè)置時,你將看到類似一下界面:
上面這個命令,通過Type對象進(jìn)行過濾。從下表中,你可以確定自己所需的對象的類型,然后根據(jù)你的實(shí)際情況,調(diào)整WHERE子句中的類型。
此列表僅列出了意見,職能和程序。
二、用戶自定義存儲過程
在日常使用中,另一個字段“is_ms_shipped”也經(jīng)常用來篩選記錄。該字段用來判斷存儲過程是有微軟發(fā)布的 ,如果最初是由微軟發(fā)布的,則該字段的值為0; 如果不是由微軟發(fā)布的,則該字段的值為1 。
在上面的T-SQL語句的基礎(chǔ)上,您只要增加個限制條件“and [ is_ms_shipped ] = 0 ”,就可以找到不是微軟創(chuàng)建的存儲過程,這些或許是你或者第三方軟件商訪問數(shù)據(jù)庫時創(chuàng)建的。如果您只想看看微軟提供的儲存過程,只要將值從0到1即可 。
下面舉例說明,通過一個T-SQL代碼演示如何獲取只有用戶定義的存儲過程。
USE [your_database_name_here];
GO
SELECT * FROM sys.all_objects
WHERE ([type] = 'P' OR [type] = 'X' OR [type] = 'PC')
AND [is_ms_shipped] = 0
ORDER BY [name];
GO
需要注意的是,這個語句的執(zhí)行結(jié)果,因每個人的數(shù)據(jù)庫的情況不同,而得到不同的記錄列表。情況而異。執(zhí)行之后,將看到類似下圖的輸出結(jié)果。
三、小結(jié)
通過上面的例子可以看到,通過少量代碼,我們就可以很容易地、快速地獲得自己所用的SQL Server 的存儲過程列表,你不必在一個個網(wǎng)站中搜索這些存儲過程了。你可能會學(xué)到一個之前自己花了很大精力編寫的復(fù)雜腳本,現(xiàn)在直接用一個存儲過程就可以實(shí)現(xiàn)同樣的效果了。
請記住,當(dāng)使用一個不能確定來源或結(jié)果的存儲過程,應(yīng)該在測試系統(tǒng)先驗(yàn)證; 從來沒有使用任何沒有得到徹底的測試在生產(chǎn)環(huán)境中。
本文只是告訴各位可以用來獲得SQL Server 2005中所有存儲過程的方法,但不是鼓勵你隨意使用任何類型的存儲過程,特別是無文檔類型的。Microsoft一再聲明:微軟對所有無文檔的存儲過程,擴(kuò)展存儲過程,函數(shù)和視圖,均不提供任何相關(guān)的支持。
但其實(shí),您可以在一分鐘之內(nèi)就可以自己列出這些存儲過程、函數(shù)和視圖的清單!這份名單甚至包括SQL Server中所有無文檔的存儲過程。通過這個清單,你就可以確定你所想要找的存儲過程。
SQL Server 2005實(shí)際上保存了所有存儲過程的列表,包括有文檔的、無文檔的,甚至是用戶自定義的!所有這些信息,都包含在系統(tǒng)表中。最簡單的方法是使用一個系統(tǒng)視圖,特別是sys.all_objects這個視圖來查閱。
您也可以使用sys.procedures目錄視圖,但我的測試結(jié)果,發(fā)現(xiàn)這個視圖會過濾掉一些儲存過程。
您也可以使用系統(tǒng)儲存過程sp_stored_procedures返回當(dāng)前環(huán)境中的存儲過程列表 ,但這個存儲過程同樣也限制了存儲過程返回值。
通過對比,我覺得:如果想獲得SQL Server 2005中所有的儲存程序,建議使用sys.all_objects這個系統(tǒng)視圖,sys.Procedures或sp_Stored_Procedures這兩個視圖會因?yàn)槟承┪粗颍^濾掉一些內(nèi)容,造成信息不全。
存儲過程信息是存儲在各自用戶數(shù)據(jù)庫中的系統(tǒng)表中的。SQL Server 2005保存了存儲過程的唯一標(biāo)識信息,如存儲過程的名稱、創(chuàng)建時間、修改時間、是否來自微軟等等。
如何確保所有的用戶數(shù)據(jù)庫都能夠自動創(chuàng)建這些存儲過程呢?
當(dāng)SQL Server部署完成后,微軟提供的存儲過程,是保存在master數(shù)據(jù)庫中的。當(dāng)您新建一個數(shù)據(jù)庫時,master數(shù)據(jù)庫將作為模板數(shù)據(jù)庫,因此,master數(shù)據(jù)庫中的所有存儲過程將自動創(chuàng)建到你所新建的數(shù)據(jù)庫中。
如果你想創(chuàng)建一個存儲過程,并希望能夠自動分發(fā)到所有的數(shù)據(jù)庫中,你可以在master數(shù)據(jù)庫中建立該存儲過程,這樣之后新創(chuàng)建的數(shù)據(jù)庫中,將自動包含你新建的這個存儲過程; 但對于之前已經(jīng)存在的數(shù)據(jù)庫,你仍需要到每個數(shù)據(jù)庫中手動創(chuàng)建這個存儲過程。
一、列出所有的儲存過程
以下代碼列出了SQL Server 2005中存在的所有儲存過程。
復(fù)制代碼 代碼如下:
USE [your_database_name_here];
GO
SELECT * FROM sys.all_objects
WHERE ([type] = 'P' OR [type] = 'X' OR [type] = 'PC')
ORDER BY [name];
GO
如果您已經(jīng)安裝了SQL Server 2005,并使用了所有的默認(rèn)設(shè)置時,你將看到類似一下界面:
上面這個命令,通過Type對象進(jìn)行過濾。從下表中,你可以確定自己所需的對象的類型,然后根據(jù)你的實(shí)際情況,調(diào)整WHERE子句中的類型。
此列表僅列出了意見,職能和程序。
二、用戶自定義存儲過程
在日常使用中,另一個字段“is_ms_shipped”也經(jīng)常用來篩選記錄。該字段用來判斷存儲過程是有微軟發(fā)布的 ,如果最初是由微軟發(fā)布的,則該字段的值為0; 如果不是由微軟發(fā)布的,則該字段的值為1 。
在上面的T-SQL語句的基礎(chǔ)上,您只要增加個限制條件“and [ is_ms_shipped ] = 0 ”,就可以找到不是微軟創(chuàng)建的存儲過程,這些或許是你或者第三方軟件商訪問數(shù)據(jù)庫時創(chuàng)建的。如果您只想看看微軟提供的儲存過程,只要將值從0到1即可 。
下面舉例說明,通過一個T-SQL代碼演示如何獲取只有用戶定義的存儲過程。
復(fù)制代碼 代碼如下:
USE [your_database_name_here];
GO
SELECT * FROM sys.all_objects
WHERE ([type] = 'P' OR [type] = 'X' OR [type] = 'PC')
AND [is_ms_shipped] = 0
ORDER BY [name];
GO
需要注意的是,這個語句的執(zhí)行結(jié)果,因每個人的數(shù)據(jù)庫的情況不同,而得到不同的記錄列表。情況而異。執(zhí)行之后,將看到類似下圖的輸出結(jié)果。
三、小結(jié)
通過上面的例子可以看到,通過少量代碼,我們就可以很容易地、快速地獲得自己所用的SQL Server 的存儲過程列表,你不必在一個個網(wǎng)站中搜索這些存儲過程了。你可能會學(xué)到一個之前自己花了很大精力編寫的復(fù)雜腳本,現(xiàn)在直接用一個存儲過程就可以實(shí)現(xiàn)同樣的效果了。
請記住,當(dāng)使用一個不能確定來源或結(jié)果的存儲過程,應(yīng)該在測試系統(tǒng)先驗(yàn)證; 從來沒有使用任何沒有得到徹底的測試在生產(chǎn)環(huán)境中。
本文只是告訴各位可以用來獲得SQL Server 2005中所有存儲過程的方法,但不是鼓勵你隨意使用任何類型的存儲過程,特別是無文檔類型的。Microsoft一再聲明:微軟對所有無文檔的存儲過程,擴(kuò)展存儲過程,函數(shù)和視圖,均不提供任何相關(guān)的支持。
相關(guān)文章
監(jiān)視SQLServer數(shù)據(jù)庫鏡像[圖文]
SQLServer2005以上版本提供了一個數(shù)據(jù)庫鏡像監(jiān)視器,不過打開它的方法比較特別。有了圖形界面以后,SQLServer數(shù)據(jù)庫鏡像的維護(hù)難度跟成本大大降低了。2009-05-05SQL2005重新生成索引的的存儲過程 sp_rebuild_index
本文分享了一個筆者自己整理的存儲過程,幫助技術(shù)人員快速的重新生成數(shù)據(jù)庫的索引,以減輕重復(fù)的工作,有需要的朋友,可以參考一下。2016-03-03SQL server 2005中設(shè)置自動編號字段的方法
這篇文章主要介紹了SQL server 2005中設(shè)置自動編號字段的方法 ,需要的朋友可以參考下2015-08-08sqlserver 中charindex/patindex/like 的比較
sqlserver 中charindex/patindex/like 的比較,大家可以看下根據(jù)需要自行選擇。2009-09-09PowerDesigner中如何導(dǎo)入SQL Server數(shù)據(jù)庫
這篇文章向我們介紹了如何導(dǎo)入SQL Server數(shù)據(jù)庫到PowerDesigner中的詳細(xì)步驟說明,并附帶圖片介紹,需要了解的朋友可以參考下2015-07-07Sqlserver 2005使用XML一次更新多條記錄的方法
Sqlserver 2005使用XML一次更新多條記錄的方法,需要一次更新多條記錄的朋友可以參考下。2010-04-04