日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SQL Server 2000的視圖中必須小心使用*符號

瀏覽:240日期:2023-11-06 12:49:06

有些朋友看到這個標題可能會有疑問,難道在視圖中使用*符號還有何要注意的地方嗎?對于這個問題,我們先不必回答,先看一下例子吧。

我這里,使用的數據庫是SqlServer2000自帶的Northwind,這樣方便大家自己私下里測試。首先,創建兩個視圖,視圖的腳本如下:

--視圖 vCustomersA

create view vCustomersA

as

select CustomerID ,CompanyName,ContactName,ContactTitle,

Address,City,Region,PostalCode,Country,Phone,Fax

from dbo.Customers

go

--視圖 vCustomersB

create view vCustomersB

as

select * from vCustomersA

go

然后,使用這兩個視圖查詢客戶ID為ALFKI的資料,查詢語句如下:

select * from vCustomersA where CustomerID = 'ALFKI'

select * from vCustomersB where CustomerID = 'ALFKI'

查詢的結果如下:

一切正常,這個時候,需求發生了變化,我們需要改動vCustomersA,改動后的腳本如下:(為了說明問題,我們只是把CompanyName和ContactName互換一下位置)

--改動后的視圖vCustomersA

alter view vCustomersA

as

select CustomerID ,ContactName,CompanyName,ContactTitle,

Address,City,Region,PostalCode,Country,Phone,Fax

from dbo.Customers

go

這個時候,當我們再次使用視圖vCustomersB查詢客戶ID為ALFKI的資料的時候,錯誤已經悄然來臨,你注意到了嗎?讓我們來看一下這兩個視圖的查詢結果吧,查詢語句如下:

select * from vCustomersA where CustomerID = 'ALFKI'

select * from vCustomersB where CustomerID = 'ALFKI'

查詢的結果發生變化。你注意到數據的異常了嗎?使用視圖vCustomersB查詢的結果出現了錯誤,CompanyName顯示的資料是:Maria Anders,而在視圖vCustomersA查詢的結果中CompanyName是:Alfreds Futterkiste。我們僅僅是在vCustomersA中互換了兩個字段的位置,再次使用vCustomersB查詢數據卻發生了數據錯位的現象,這是什么原因導致的呢?

帶著這個問題,讓我們去了解一下,何謂視圖?在Sql Server2000的幫助文檔中是這樣描述視圖的,定義如下:“視圖是一個虛擬表,其內容由查詢定義,同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖并不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,并且在引用視圖時動態生成。”通過這個定義我們可以看出,視圖是一個虛擬的表,它僅僅包括視圖的定義腳本,查詢的內容則是動態的生成。當我們創建了一個視圖以后,視圖的腳本會保存到當前數據庫的系統表syscomments里,我們可以通過系統提供的存儲過程:sp_helptext查詢得到視圖的定義腳本。從定義上看,好像并不能得到我們想要的答案,那么我們就先不管Sql Server2000是如何實現視圖的,我們先來解決一下當前的問題(我上面提到的)。可能有些朋友已經知道了解決問題的辦法了,那就是把vCustomersB的定義腳本重新執行一下(其實只需要把create換成alter執行一下就可以),腳本如下:

--重新執行一下vCustomersB的定義腳本

alter view vCustomersB

as

select * from vCustomersA

go

那么,除了這個方法以外,其實SqlServer2000也提供了一個擴展存儲過程sp_refreshview來幫我們做這件事情,調用的腳本如下:

--刷新指定視圖的元數據

exec sp_refreshview 'vCustomersB'

我個人目前就知道這兩個辦法,不知道,你還有沒有其他的辦法,有的話可以一起分享一下。

sp_refreshview的功能描述為:“刷新指定視圖的元數據。由于視圖所依賴的基礎對象的更改,視圖的持久元數據會過期。”由于sp_refreshview的代碼被封裝了(沒有公開),所以我們看不到它的內部實現,不過看了這個存儲過程的描述,你是否對視圖有了新的認識呢?

從這里,我們可以看到,當我們使用一個視圖查詢數據的時候,其實我們是在使用視圖的元數據來查詢的,當視圖依賴的對象發生了變化以后,視圖的元數據就需要更新,這樣,使用視圖時才不會違背我們的意愿。

知道了問題的產生的原因后,那么我們在重新修改一個表或視圖的腳本時,我們就需要更新依賴于該對象的視圖,否則就會出現意想不到的錯誤。如何找到依賴于該對象的對象(包括視圖,觸發器,存儲過程)呢?SqlServer2000在該數據庫的系統表sysdepends里記錄這些依賴關系,所以你可以查詢該表獲取你想要的信息,但其實,你可以通過使用系統提供的存儲過程:sp_depends來獲取該對象的所依賴的對象(返回的第一個表)以及依賴于該對象的對象(返回的第二個表),腳本如下:

--查詢vCustomersA的依賴的對象以及依賴于vCustomersA的對象

exec sp_depends 'vCustomersA'

查詢的結果如下圖:

注:sp_depends的代碼是公開的,有興趣的可以看一下其實現過程。

到此,你應該明白,當你更新你的表或視圖的時候,你還要刷新依賴于這些對象的視圖的元數據,即需要調用sp_refreshview來刷新依賴于該對象的視圖。但是你在查詢依賴于一個表或者視圖的對象集合的時候需要注意的一點是,在你更新了一個表或視圖之后,那些之前創建的依賴于該表或視圖的依賴關系將會丟失(你更新的表或視圖所依賴的對象集合不會丟失),用我之前的例子來看,vCustomersB依賴于vCustomersA,那么當我們修改了vCustomersA以后,vCustomersB與vCustomersA之間的依賴關系將會丟失而vCustomersA所依賴的Customers將不會丟失(依賴關系在對象創建或更新時創建,更新時,會把先前的依賴關系刪掉)。(調用sp_depends你就可以看出來這種微妙的變化)

希望在你閱讀了本文以后,你在使用視圖的時候會更加的得心應手,避免錯誤發生。文中有不對的地方歡迎指正批評!

標簽: Sql Server 數據庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品黄色| 三级精品视频| 免费精品国产的网站免费观看| 日韩欧美中文| 99亚洲视频| 亚洲精品中文字幕99999| 亚洲日本国产| 国产精品多人| 欧美在线不卡| 日本va欧美va精品发布| 伊人国产精品| 日本v片在线高清不卡在线观看| 精品国产不卡| 日韩三区四区| 日韩一区免费| 国产欧美一区二区色老头| 日韩在线不卡| 蜜桃成人精品| 极品日韩av| 欧美三级第一页| 亚洲成人av观看| 91精品国产成人观看| 久久狠狠久久| 国产精品nxnn| 久久精品理论片| 日韩不卡视频在线观看| 亚洲综合国产| 中文字幕在线免费观看视频| 亚洲一区成人| 免费看精品久久片| 天堂√中文最新版在线| 亚洲精品在线影院| 亚洲神马久久| 国产欧美日韩一区二区三区在线| 美腿丝袜亚洲一区| 日韩欧美中文字幕在线视频| 欧美日韩网址| 国产伦久视频在线观看| 欧美aa国产视频| 免费久久精品视频| 国产剧情在线观看一区| 国产一区二区视频在线看| 精品在线99| 日本aⅴ亚洲精品中文乱码| 精品视频高潮| 亚洲免费在线| 国产麻豆精品| 欧美91视频| 国产精品jk白丝蜜臀av小说| 欧美~级网站不卡| 国产精品chinese| 女同性一区二区三区人了人一| 18国产精品| 欧美中文字幕一区二区| 久久成人精品| 欧美国产三级| 五月天久久久| 国产精品嫩模av在线| 色综合www| 日本三级亚洲精品| 激情欧美一区二区三区| 国产精品天天看天天狠| 91成人超碰| 精品伊人久久| 亚洲视频国产精品| 99热精品久久| 国产福利亚洲| 蜜臀av性久久久久蜜臀aⅴ四虎| 91日韩免费| 亚洲欧洲美洲国产香蕉| 97视频热人人精品免费| 日韩欧美中文字幕电影| 国产一区观看| 麻豆精品在线播放| 先锋影音久久久| 国产传媒av在线| 日韩av网站免费在线| 久久中文字幕二区| 老色鬼精品视频在线观看播放| 亚洲免费影院| 久久一级电影| 日韩欧美午夜| 久久精品人人| 日韩国产一二三区| 伊人久久成人| 国产精品毛片视频| 天堂成人国产精品一区| 偷拍精品精品一区二区三区| 国产伦精品一区二区三区视频| 欧美日韩高清| 久久毛片亚洲| 美女久久久久久| 日韩av网站在线免费观看| 免费精品视频最新在线| 91精品成人| 欧美日韩色图| 韩国精品主播一区二区在线观看 | 999国产精品| 九九99久久精品在免费线bt| 久久精品99久久久| 中文不卡在线| 精品1区2区3区4区| 日韩精品免费一区二区三区| av中文资源在线资源免费观看| 国产精品调教| 欧美国产专区| 美女尤物国产一区| 久久av免费看| 国产精品黄色| 久久亚洲资源中文字| 综合精品一区| 日本欧美在线看| 午夜在线一区二区| 玖玖玖国产精品| 影音先锋久久精品| 亚洲精品精选| 日本a级不卡| 欧美精品三级在线| 国产精品一区二区av交换| 久久精品99久久久| 日韩1区2区日韩1区2区| 国产精品亚洲片在线播放| 国产欧美日韩精品一区二区免费| 91久久精品无嫩草影院| 日本精品另类| 日韩国产在线不卡视频| 欧美日韩亚洲一区二区三区在线| 欧美日韩18| 久久a爱视频| 精品久久久久中文字幕小说| 久久中文在线| 国语精品一区| 亚洲最新无码中文字幕久久| 日韩在线视频精品| 日韩一区二区三区在线免费观看| 亚洲a一区二区三区| 亚洲欧洲一区| 亚洲免费观看高清完整版在线观| 亚洲综合婷婷| 国产精品一站二站| 久久精品人人| 99久久99视频只有精品| 中文亚洲欧美| 日韩高清一区在线| 久久亚洲黄色| 久久蜜桃精品| 国产视频一区三区| 日韩国产欧美视频| 久久精品国产久精国产| 免费一二一二在线视频| 欧美另类专区| 日韩不卡手机在线v区| 麻豆国产91在线播放| 天堂av在线| 欧美综合国产| 国产日产精品_国产精品毛片| 精品三区视频| 欧美成人综合| 日韩精品三区四区| 欧美www视频在线观看| 蜜桃国内精品久久久久软件9| 自拍日韩欧美| 国产欧美日韩一级| 私拍精品福利视频在线一区| 亚洲免费网址| 国产福利资源一区| 免费国产自久久久久三四区久久 | 美女在线视频一区| 成人美女视频| 欧美日韩国产在线一区| 91亚洲精品在看在线观看高清| 国产第一亚洲| 午夜亚洲一区| 欧美国产免费| 午夜精品婷婷| 久久精品99国产精品日本| 日韩免费久久| 日本亚洲视频在线| 欧美亚洲日本精品| 中文字幕日韩欧美精品高清在线| 美女国产一区二区三区| 欧美成人高清| 久久精品一区| 亚洲欧美日韩精品一区二区| 麻豆成人av在线| 亚洲少妇一区| 久久伊人久久| 香蕉久久国产| 91亚洲国产成人久久精品| 国产精品社区| 黄色网一区二区| 在线看片日韩| a日韩av网址| 日韩国产精品久久久久久亚洲| 九九色在线视频| 日韩国产欧美在线视频| 欧美午夜精品一区二区三区电影| 国产亚洲久久| 午夜日韩福利| 欧美三区四区|