用ALTER VIEW來改變視圖
2024-07-21 02:35:26
供稿:網友
假如你需要改變或者更新一個視圖(view)或者維護當前的存儲過程或者觸發器,我建議你使用ALTER VIEW。盡管停止視圖并重新建立視圖是一個誘人的想法,但這樣做有可能會刪除視圖上的全部許可(permission)、存儲過程和觸發器。
ALTER VIEW的語法幾乎與CREATE VIEW完全相同,而且像CREATE VIEW那樣,你可以通過添加WITH ENCRYPTION和(或者)WITH SCHEMABINGDING來改變一個視圖。
但是,使用ALTER VIEW還是有幾個需要注重的地方。假如你的視圖訪問新的對象,那么該視圖的許可必須和新對象的許可一樣,否則視圖不能成功訪問新對象。
此外,修改視圖的用戶必須擁有與該視圖有關的表格、視圖、表格值函數的ALTER VIEW和SELECT許可以及對該視圖調用的標量函數(scalar-valued function)的EXECUTE許可。
你還需要牢記一點:假如你最初用WITH ENCRYPTION或者CHECK OPTION創建的視圖,你必須在ALTER VIEW語句后面再次包含這些參數。也就是說,假如你修改了視圖,那么你必須重新設置WITH ENCRYPTION和CHECK OPTION。這些參數不會自動保留下來。
在下面的例子中,我將創建一個簡單的視圖并運行它。然后,我將修改它,確認它的結果,并用sp_helptext來查看視圖文本中改變的地方。
首先,我將建立一個簡單的視圖,它將調出authors表格中所有加利福尼亞州作者的名、姓以及所在城市。
CREATE VIEW vwCalAuthors
AS
Select au_fname, au_lname, city
FROM authors
where state = 'CA'
With CHECK OPTION
GO
讓我們看看這個視圖工作的情況如何。
SELECT * FROM vwCalAuthors
au_fname au_lname city
-------- -------- -------------
Johnson White Menlo Park
Marjorie Green Oakland
Cheryl Carson Berkeley
Heather McBadden Vacaville
(15 row(s) affected)
現在,我決定讓這個視圖只反映加尼弗尼亞州奧克蘭市的作者情況
ALTER VIEW vwCalAuthors
AS
Select au_fname, au_lname, city
FROM authors
WHERE state = 'CA' and city = 'Oakland'
GO
讓我們運行這個result set來得到奧克蘭市的作者信息:
au_fname au_lname city
-------- -------- ----
Marjorie Green Oakland
Dean Straight Oakland
Dirk Stringer Oakland
Stearns MacFeather Oakland
Livia Karsen Oakland
(5 row(s) affected)
最后,假如相對于運行result set,你更情愿調用改變后的視圖文本,你可以用sp_helptext系統存儲過程來查看隱藏在視圖后面的文本。(記住,ALTER VIEW改變了視圖最初創建時在第一位置所使用的CREATE VIEW語句,因此在你的結果中你應該看到的語句。)
注重,想一想我們還遺漏了什么:我們在修改視圖時沒有包括CHECK OPTION,現在它已經沒有了。在每次修改視圖時,我們都必須手工重置CHECK OPTION和WITH ENCRYTION。
Sp_helptextvwCalAuthors
Text
-------------------------------------------------------
CREATE VIEW vwCalAuthors
AS Select au_fname, au_lname, city
FROM authors
WHERE state = 'CA'and city = 'Oakland'