SQL Server視圖數(shù)據(jù)更改的常見限制條件
SQL Server視圖相信大家都比較熟悉了,下面就為您介紹SQL Server視圖數(shù)據(jù)更改的常見限制條件,如果您對SQL Server視圖方面感興趣的話,不妨一看。
當(dāng)用戶更新視圖中的數(shù)據(jù)時,其實更改的是其對應(yīng)的數(shù)據(jù)表的數(shù)據(jù).無論是對視圖中的數(shù)據(jù)進(jìn)行更改,還是在視圖中插入或者刪除數(shù)據(jù),都是類似的道理.但是,不是所有SQL Server視圖都可以進(jìn)行更改.如下面的這些視圖,在SQL Server數(shù)據(jù)庫中就不能夠直接對其內(nèi)容進(jìn)行更新,否則,系統(tǒng)會拒絕這種非法的操作.
(1) Group By子句
如在一個SQL Server視圖中,若采用Group By子句,對視圖中的內(nèi)容進(jìn)行了匯總。則用戶就不能夠?qū)@張視圖進(jìn)行更新。這主要是因為采用Group By子句對查詢結(jié)果進(jìn)行匯總在后,視圖中就會丟失這條紀(jì)錄的物理存儲位置。如此,系統(tǒng)就無法找到需要更新的紀(jì)錄。若用戶想要在視圖中更改數(shù)據(jù),則數(shù)據(jù)庫管理員就不能夠在視圖中添加這個Group BY分組語句。
(2) Distinct關(guān)鍵字
如不能夠使用Distinct關(guān)鍵字。這個關(guān)鍵字的用途就是去除重復(fù)的紀(jì)錄。如沒有添加這個關(guān)鍵字的時候,視圖查詢出來的紀(jì)錄有250條。添加了這個關(guān)鍵字后,數(shù)據(jù)庫就會剔除重復(fù)的紀(jì)錄,只顯示不重復(fù)的50條紀(jì)錄。此時,若用戶要改變其中一個數(shù)據(jù),則數(shù)據(jù)庫就不知道其到底需要更改哪條紀(jì)錄。因為視圖中看起來只有一條紀(jì)錄,而在基礎(chǔ)表中可能對有的紀(jì)錄有幾十條。為此,若在視圖中采用了Distinct關(guān)鍵字的話,就無法對視圖中的內(nèi)容進(jìn)行更改。
(3) AVG、MAX等函數(shù)
如果在視圖中有AVG、MAX等函數(shù),則也不能夠?qū)ζ溥M(jìn)行更新。如在一張視圖中,其采用了SUN函數(shù)來匯總員工的工資時,此時,就不能夠?qū)@張表進(jìn)行更新。這是數(shù)據(jù)庫為了保障數(shù)據(jù)一致性所添加的限制條件。
小結(jié): 可見,試圖雖然方便、安全,但是,其仍然不能夠代替表的地位。當(dāng)需要對一些表中的數(shù)據(jù)進(jìn)行更新時,我們往往更多的通過對表的操作來完成。因為對視圖內(nèi)容進(jìn)行直接更改的話,需要遵守一些限制條件。在實際工作中,更多的處理規(guī)則是通過前臺程序直接更改后臺基礎(chǔ)表。至于這些表中數(shù)據(jù)的安全性,則要依靠前臺應(yīng)用程序來保護。確保更改的準(zhǔn)確性、合法性。
【編輯推薦】