SQL Server 預存程序 sp_helptext的不足以及解決方案

來源:互聯網
上載者:User

介紹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,一定要重啟哦,否則不生效。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.