前面講的兩種類(lèi)型的表表達(dá)式(派生表和CTE),它們的作用范圍都非常有限,僅限于在單個(gè)語(yǔ)句范圍內(nèi)使用,只要包含這些表表達(dá)式的外部查詢(xún)完成操作,它們便隨它消失了。這也就意味著派生表和CTE都是不可重用的。
相較于派生表和CTE,視圖是一種可重用的表表達(dá)式,它定義在數(shù)據(jù)庫(kù)中。一旦創(chuàng)建,它就是數(shù)據(jù)庫(kù)的永久部分,只有用刪除命令顯示刪除它們才會(huì)從數(shù)據(jù)庫(kù)中刪除。下面是視圖的示例代碼。
USE TSQLFundamentals2008;GO-- 視圖-- 創(chuàng)建視圖IF OBJECT_ID('dbo.V_USACusts','V') IS NOT NULL DROP VIEW dbo.V_USACusts;GOCREATE VIEW dbo.V_USACustsASSELECT custid,companyname,contactname,contacttitle,address,city,region,postalcode,country,phone,faxFROM Sales.CustomersWHERE country= N'USA';GO-- 查詢(xún)視圖SELECT custid,companyname,region FROM dbo.V_USACustsORDER BY region;-- 修改視圖ALTER VIEW dbo.V_USACustsASSELECT custid,companyname,contactname,contacttitle,address,city,region,postalcode,country,phone,faxFROM Sales.CustomersWHERE country= N'USA';GO-- 查看視圖定義(通過(guò)函數(shù)OBJECT_DEFINITION)SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.V_USACusts','V'));EXEC sys.sp_helptext @objname = N'dbo.V_USACusts';-- 修改視圖,指定ENCRYPTION選項(xiàng),可以對(duì)視圖的定義進(jìn)行混淆處理,這樣普通用戶(hù)無(wú)法查看ALTER VIEW dbo.V_USACusts WITH ENCRYPTIONASSELECT custid,companyname,contactname,contacttitle,address,city,region,postalcode,country,phone,faxFROM Sales.CustomersWHERE country= N'USA';GO-- 修改視圖,指定SCHEMABINDING選項(xiàng),可以防止被引用的對(duì)象或列被刪除ALTER VIEW dbo.V_USACusts WITH SCHEMABINDINGASSELECT custid,companyname,contactname,contacttitle,address,city,region,postalcode,country,phone,faxFROM Sales.CustomersWHERE country= N'USA';GO-- 修改視圖,指定CHECK OPTION選項(xiàng),防止通過(guò)視圖執(zhí)行的數(shù)據(jù)修改與視圖中設(shè)置的過(guò)濾條件發(fā)生沖突ALTER VIEW dbo.V_USACustsASSELECT custid,companyname,contactname,contacttitle,address,city,region,postalcode,country,phone,faxFROM Sales.CustomersWHERE country= N'USA'WITH CHECK OPTION;GO
新聞熱點(diǎn)
疑難解答
圖片精選