介紹sp_helptext 前 先介紹下系統資料表sys.syscomments 以及 系統檢視表 sys.sql_modules。
sys.syscomments:包含資料庫中每個視圖、規則、預設值、觸發器、CHECK 條件約束、DEFAULT 約束和預存程序的項。text 列包含原始的 SQL 定義語句。(簡單點說,這個系統資料表儲存了我們建立的預存程序、視圖等的源碼,通過查詢該系統資料表可以查看建立的預存程序等源碼。SQL Server2000引入)
sys.sql_modules:對每個 SQL 語言定義的模組對象都返回一行。類型為 P、RF、V、TR、FN、IF、TF 和 R 的對象均有關聯的 SQL 模組。在此視圖中,獨立的預設值,即 D 類型的對象也具有 SQL 模組定義。(SQL Server 2005引入)
以上兩句話來自於SQL Server的本地協助文檔中。在查看sys.syscomments的說明時,有一個重要的提示:
點擊 SQL Server 2000系統資料表映射到 SQL Server 2005 系統檢視表,找到:
意思是說,建議改用視圖sys.sql_modules來代替sys.syscomments系統資料表。
sp_helptext 是MS SQL Server的一個系統預存程序,可以通過它來查看預存程序或者視圖源碼(最好的方式是通過設定快速鍵綁定預存程序,這樣效率比較高),
但是這個預存程序又幾個不好的地方:
1、它會幫你格式化代碼
2、當一行長度超過一定後,它給你分行顯示(當一行代碼過長時,這個煩人的問題就來了)
這樣代碼就顯得比較難看了。。相信用過sp_helptext預存程序的都知道這個問題。
當然可以通過右鍵預存程序名稱 然後點擊修改 ,也能顯示源碼。並且代碼格式完好無損。但是無法綁定快速鍵。效率低。
解決方案:就是藉助sys.syscomments或者sys.sql_modules 自己寫一個預存程序 來顯示源碼,使其格式不亂。並且可以綁定快速鍵。
鑒於微軟的重要提示,所以在這裡,使用sys.sql_modules:
--Siuon--查看預存程序源碼create procedure mp_helptext(@name varchar(255))asdeclare @object_id int,@sourcecode varchar(max),@line varchar(max),@end int,@rn varchar(2),@tab varchar(1)declare @source table(source varchar(max))set @rn = char(13)+char(10)set @tab = char(9)select @sourcecode = definition from sys.sql_modules where object_id=object_id(@name)while(charindex(@rn,@sourcecode)!=0)beginset @end=charindex(@rn,@sourcecode)set @line = replace(substring(@sourcecode,1,@end-1),@tab,@tab+@tab)if(charindex('create',@line)<>0 and (charindex('proc',@line)<>0 or charindex('view',@line)<>0 or charindex('function',@line)<>0 or charindex('trigger',@line)<>0))beginset @line = replace(@line,'create','alter')endinsert into @source(source) values(@line)set @end = @end + 2set @sourcecode = substring(@sourcecode,@end,len(@sourcecode))endinsert into @source(source) values(@sourcecode)select * from @source
設定SQL Server 快速鍵 綁定 該預存程序:
SQL Server菜單 工具--選項--環境--鍵盤: 在這裡我是設定的Ctrl+F1鍵 對應剛剛的預存程序名。
點擊確定後,重啟SQL Server Manage Studio,一定要重啟哦,否則不生效。