最近遇到了查兩個表的情況,首先我想到的是用存儲過程,但是如果需要兩個查詢結果的值的話,必須根據存儲過程查詢語句的順序取你要的Table,例如DataSet.Tables[0] ,DataSet.Table[1]來擷取想要的Table值,比較麻煩。早就聽說視圖了,想着可能比存儲過程簡單多了,查詢了一下資料,确實是比存儲過程友善簡單快捷多了。
1.自己的了解:視圖就是從若幹個基本表或者其他視圖構造出來的虛拟表。也可以隻取某個表的幾個字段。同真實的表一樣,視圖包含一系列帶有名稱的列和行資料,能夠進行的一般操作都可以應用于視圖,例如查詢,插入,修改,删除操作等。
2.簡單應用--機房收費系統stucheckcash
需要查詢兩個表:卡表和學生表。
(1)建立視圖--在自己的資料庫下找到視圖

(2)選擇涉及到的表或視圖
(3)在表中選擇想要的字段
(4)點選儲存并重新命名
(5)編寫代碼(和普通表沒有差別,直接把表名改為視圖名就行)
Public Function Querystudent(enStudent As StudentEntity) As DataTable Implements IStudent.Querystudentinfo
'Dim student As New StudentEntity '執行個體化實體類
Dim table As New DataTable '執行個體化資料表
'定義并執行個體化參數數組,防止sql注入
Dim paras As SqlParameter() = {New SqlParameter("@Studentno", enStudent.Studentno)}
'這裡用的是視圖,把原先的Student_info改為了StuCardView_info
Dim sqlstr As String = "Select * From StuCardView_info where Stuno= @Studentno"
'調用SqlHelper類中的ExecSelect()方法來執行查詢,擷取傳回值
table = clsSqlHelper.ExecSelect(sqlstr, CommandType.Text, paras)
Return table
End Function
詳解:原先需要寫兩個查詢語句,一個關于卡表查詢的,一個關于學生表查詢的,現在隻需要寫一個查詢語句即可。
3.易錯處:
可以看看這個圖和上圖的差別,第一副圖是表之間有關聯,卡表與學生表之間有外鍵,第二圖沒有建立關聯。
差別:第一副圖顯示結果(查卡号為66):
這幅圖顯示的是我要的正确結果。
第二幅圖顯示結果:
會把學生表所有的資料顯示出來,卡号是卡表中的對學生表不起作用,是以會顯示全部并且給所有條記錄的卡号都指派成了66号。
總結:經過實踐,視圖在查詢兩個表,比存儲過程易操作。隻查詢表中的某幾個字段也可以,友善快捷,真的是挺實用的。但是也有缺點,操作視圖會比直接操作基礎表要慢,是以我們盡量避免在大型表上建立視圖。這才剛剛開始了解,還需要繼續深刻的研究。
Ps:有了解不對的地方請多多指教。