Sql Server 視圖數(shù)據(jù)的增刪改查教程
一、視圖的基本概念
視圖是用于查詢的另外一種方式。 與實(shí)際的表不同,它是一個(gè)虛表;因此數(shù)據(jù)庫(kù)中只存在視圖的定義,而不存在視圖中相對(duì)應(yīng)的數(shù)據(jù),數(shù)據(jù)仍然存放在原來(lái)的基本表中。視圖是一種邏輯對(duì)象。
二、 視圖能做什么
導(dǎo)出數(shù)據(jù); 在導(dǎo)出數(shù)據(jù)時(shí),常常需要多個(gè)表聯(lián)合查詢,這個(gè)時(shí)候就可以使用視圖;轉(zhuǎn)換字段,如把status(0/1 Int類型)字段轉(zhuǎn)換成啟用/停用(文字) ,然后用視圖保存定義。
數(shù)據(jù)安全,可以給視圖加密。
三、視圖操作
3.1 查詢數(shù)據(jù)
(一)準(zhǔn)備素材:
使用兩張表,其中一張是家電表,另外一張字典表(只需要知道這兩張表有一個(gè)連接字段brandID-RowID:注意兩個(gè)表沒有強(qiáng)制使用外鍵約束),準(zhǔn)備好素材
SELECT TOP 1000 [appliancesName] ,[appliancesType] ,[code] ,[**brandId**] ,[standard] ,[appliancesStatus] ,[appliancesIsNew] ,[appliancesIsKey] ,[appliancesRemark] ,[appliancesId] FROM sfa_t_appliances
另外一張表字典表
SELECT TOP 1000 [**RowID**] ,[PRowID] ,[DicKey] ,[DicVal] ,[Status] FROM sfa_t_TSysDictionary
說(shuō)明:sfa_t_appliances 表中的字段brandId 與 sfa_t_TSysDictionary表中的rowid做關(guān)聯(lián)。
(二)創(chuàng)建視圖:
create view appliances_view(id,name,brandName) as select s.appliancesId,s.appliancesName,d.DicVal from sfa_t_appliances s,sfa_t_TSysDictionary d where s.brandId = d.RowID

(三)查詢:
查詢數(shù)據(jù),可以將視圖看做一張實(shí)實(shí)在在的數(shù)據(jù)表,能夠執(zhí)行各種查詢操作。
如下圖所示,執(zhí)行一個(gè)查詢操作:

(四)備注
有些書上說(shuō):可以對(duì)任何查詢結(jié)果進(jìn)行排序,但是只有當(dāng)視圖包括Top子句時(shí)才能排序視圖。這樣看來(lái)書上確實(shí)是有問題的。動(dòng)手實(shí)踐出真知
3.2 插入數(shù)據(jù)
實(shí)驗(yàn)一
往視圖中插入一條數(shù)據(jù):

解釋:
往視圖中插入數(shù)據(jù)時(shí),能夠往sfa_t_appliances 中插入數(shù)據(jù)。但是視圖為什么讀取不到呢?
create view appliances_view(id,name,brandName) as select s.appliancesId,s.appliancesName,d.DicVal from sfa_t_appliances s,sfa_t_TSysDictionary d where s.brandId = d.RowID
注意視圖的創(chuàng)建語(yǔ)法:是通過(guò)關(guān)聯(lián)關(guān)系獲取到的數(shù)據(jù)。注意觀看視圖的三個(gè)字段的來(lái)源。自然,在appliancesID為112233的記錄中沒有brandID,所以自然不能讀取到數(shù)據(jù)。
實(shí)驗(yàn)二

說(shuō)明: 往只含一個(gè)基本字段中插入數(shù)據(jù)是完全沒有問題的。上圖也插入成功了。
實(shí)驗(yàn)三
將多個(gè)基表的字段都插入試試:
insert into appliances_view(id,name,brandName) values(112234,'視圖','冰箱')

小節(jié):
使用INSERT語(yǔ)句進(jìn)行插入操作的視圖必須能夠在基表(組成視圖查詢的表)中插入數(shù)據(jù),否則會(huì)操作失敗。
如果視圖上沒有包括基表中所有屬性為not null的行,那么插入操作會(huì)由于哪些列的NULL值而失敗。
補(bǔ)充
通過(guò)視圖可以向數(shù)據(jù)庫(kù)表中插入數(shù)據(jù),修改數(shù)據(jù)和刪除表中數(shù)據(jù)。如果視圖的SELECT語(yǔ)句中包含了DISTINCT、表達(dá)式(如計(jì)算列和函數(shù)),或FROM子句中引用多個(gè)表,或者引用不可更新的視圖,或有Group by 或者h(yuǎn)aving子句,那么都不能通過(guò)視圖操作數(shù)據(jù)。

3.3 修改數(shù)據(jù)

解釋
能夠?qū)?shù)據(jù)進(jìn)行修改,但是只能修改一張表中的數(shù)據(jù)。
查看下圖,修改基于兩個(gè)表的字段:

失敗了,說(shuō)明只能修改一張表中的字段。
3.4 刪除數(shù)據(jù)

小結(jié):
如果一個(gè)視圖鏈接了兩個(gè)以上的基表,則不允許進(jìn)行數(shù)據(jù)刪除操作。如果視圖中的列是常數(shù)或者幾個(gè)字符串列值得和,那么盡管插入和更新操作時(shí)不允許的,但是卻可以進(jìn)行刪除操作。
實(shí)驗(yàn):
(一) 創(chuàng)建基于一個(gè)表的視圖:

(二)執(zhí)行刪除操作結(jié)果:

(三)結(jié)果說(shuō)明:
基于一個(gè)表的視圖是能夠執(zhí)行刪除操作的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- Mysql數(shù)據(jù)庫(kù)高級(jí)用法之視圖、事務(wù)、索引、自連接、用戶管理實(shí)例分析
- PostgreSQL數(shù)據(jù)庫(kù)視圖及子查詢使用操作
- 簡(jiǎn)析SQL Server數(shù)據(jù)庫(kù)用視圖來(lái)處理復(fù)雜的數(shù)據(jù)查詢關(guān)系
- 解析SQL Server 視圖、數(shù)據(jù)庫(kù)快照
- SQLite教程(三):數(shù)據(jù)表和視圖簡(jiǎn)介
- sql server判斷數(shù)據(jù)庫(kù)、表、列、視圖是否存在
- MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)視圖
相關(guān)文章
SQL恢復(fù)master數(shù)據(jù)庫(kù)方法 只有mdf文件的數(shù)據(jù)庫(kù)如何恢復(fù)
這篇文章主要為大家詳細(xì)介紹了SQL恢復(fù)master數(shù)據(jù)庫(kù)方法,還分析了只有mdf文件的數(shù)據(jù)庫(kù)如何進(jìn)行恢復(fù)的情況,也就是沒有l(wèi)og文件的數(shù)據(jù)庫(kù)文件恢復(fù)方法,感興趣的小伙伴們可以參考一下2016-05-05
一些SQL Server存儲(chǔ)過(guò)程參數(shù)及例子
下面是sql server多版本下的存儲(chǔ)過(guò)程參數(shù)及例子2008-08-08
在SQL Server的try...catch語(yǔ)句中獲取錯(cuò)誤消息代碼的的語(yǔ)句
本文為大家詳細(xì)介紹下如何在SQL Server的try...catch語(yǔ)句中獲取錯(cuò)誤消息的代碼,具體示例如下,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07
SQL Server修改標(biāo)識(shí)列方法 如自增列的批量化修改
最近在運(yùn)行系統(tǒng)時(shí)需要對(duì)所有服務(wù)器上數(shù)據(jù)結(jié)構(gòu)進(jìn)行批量修改某個(gè)字段的自增屬性改成非自增2012-05-05
SQLServer 游標(biāo)的創(chuàng)建和使用基本步驟
游標(biāo)主要用于存儲(chǔ)過(guò)程、觸發(fā)器或T-SQL腳本中,當(dāng)需要遍歷查詢結(jié)果集中的每一行數(shù)據(jù)并進(jìn)行操作時(shí),游標(biāo)就顯得非常有用,本文給大家介紹SQLServer 游標(biāo)的創(chuàng)建和使用基本步驟,感興趣的朋友一起看看吧2024-08-08

