有些朋友看到這個標題可能會有疑問,難道在視圖中使用*符號還有何要注意的地方嗎?對於這個問題,我們先不必回答,先看一下例子吧。
我這裡,使用的數據庫是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'