這篇文章主要是對Sql Server中系統視圖的詳細介紹,本文講解了系統視圖是干什麼呢、都定義在哪呢、一些使用例子等內容,需要的朋友可以參考下。
一:那些系統視圖
1. 系統視圖是干什麼呢?
從名字上看就知道,系統視圖嘛?猜的不錯的話,就是存放一些sqlserver系統的一些信息,很好,恭喜你,答對了。
2. 都定義在哪呢?
為了讓你眼見為實,下面截圖看看,從截圖中你可以看到,不管是“系統數據庫”還是“用戶數據庫”都是有這些系統視圖的,而且一眼掃下去發現連名字都一樣。
3.看看這些系統視圖都能帶給我什麼福利?
Q1:我在維護一個系統的時候,我只知道有一個數據庫中,有一個表的字段叫 “state”,但我忘了是定義在那張表中?我該如何找出來?
A1: 這個簡單,在sqlserver裡面提供了一個系統視圖叫“INFORMATION_SCHEMA.COLUMNS”,下面我們截圖看看。
從這個系統視圖名字中的這個SCHEMA這個單詞可知,原來是一個保存表架構的視圖,而且還有這個字段的“排位”,“默認值”這些特性,泥煤,是不是有一種很爽的感覺???
Q2:我在C#代碼中看到了一個存儲過程名"CategoryInsert",我想看它的源碼,但是我的table中存儲過程有幾千個,總不能讓我 一個個的去找吧,,,拜托在系統視圖中可有快捷的方法查看?
A2:so easy。。。告訴你吧,只有你想不到的,沒有系統視圖做不到,不就一個簡簡單單的看存儲過程代碼麼?sys.sql_modules就可以幫你實現。
Q3:這種方法好是好,但是copy的definition字段是沒有格式化的。。。。大哥,上千行的sql哦。。。我特別想格式化的輸出怎麼辦呀?謝謝了。
A3:確實如你所說,格式化輸出的話,系統View只能幫你到這了,不過天無絕人之路,你可以使用系統存儲過程,裡面有一個神奇的sp_helptext,可以祝你實現夢想,不用謝。
二:對系統視圖的一些思考
在上面的代碼中,我演示了兩個系統view,一個proc給我們帶來的福利,那麼仔細看一看,你就會有兩個疑惑。。。。
1:系統View在哪定義的?
這個問題問的真好,從文章開頭我們就知道,我的用戶庫MYPETSHOP是有很多系統view的,但是我真的沒有定義這些view呀,老天可以給我作證,那問題就很神秘了,system view到底從何而來?這個問題你也只有問sqlserver團隊了,他們將system view都放入了一個隱藏的resource數據庫,那這個數據庫在哪呢?我給你找到。
找到了之後,我現在繼續附加進來,如果你夠聰明的話,你不能直接加載它,否則會報進程正在使用中,原因我想你也知道。
解決方法也很簡單,我們做一份copy到E盤。然後附加這個copy就好了。
既然附加進來了,我現在的感覺就是迫不及待的去看一看,細心的你通過下面的截圖,我想你應該明白了些什麼,這些view並不是在”系統視圖“文件夾下面的,而是正真的作為用戶視圖。。。對不對。。。
2:系統view的數據源在何處?
這個也是很經典的問題,既然是view,我想大家都明白,其實它就是虛表的意思,既然是虛表,那基礎表在何處?帶著這個問題我來翻一下我的MYPETSHOP數據庫。
可以看到,上面的系統基表空空如也,黃鶴一去不復返,白雲千載空悠悠。。。那更大的疑問來了,如果連基礎表都沒有,那在這個DB中的system view到底是查誰呢?這不是大忽悠麼???但是事實是真的沒有嗎?因為你沒看到不代表真的沒有,可以繼續用system view來祝我們一臂之力,接下來用sys.objects一探究竟。。。
以上就是精品提供的Sql Server中系統視圖的詳細介紹,供您參考。