更改一個先前創(chuàng)建的視圖(用 CREATE VIEW 創(chuàng)建),包括索引視圖,但不影響相關(guān)的存儲過程或觸發(fā)器,也不更改權(quán)限。有關(guān) ALTER VIEW 語句中所用參數(shù)的更多信息,請參見 CREATE VIEW。
ALTER VIEW [ < database_name > .] [ < owner > .] view_name [ ( column [ ,...n ] ) ]
[ WITH < view_attribute > [ ,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ]
< view_attribute > ::=
{ ENCRYPTION | SCHEMABINDING | VIEW_METADATA }
view_name
是要更改的視圖。
column
是一列或多列的名稱,用逗號分開,將成為給定視圖的一部分。
重要 只有在 ALTER VIEW 執(zhí)行前后列名稱不變的情況下,列上的權(quán)限才會保持不變。
說明 在視圖的各列中,列名的權(quán)限在 CREATE VIEW 或 ALTER VIEW 語句間均適用,與基礎(chǔ)數(shù)據(jù)源無關(guān)。例如,如果授予了 CREATE VIEW 語句中 title_id 列上的權(quán)限,那么 ALTER VIEW 語句可以將 title_id 列改名(例如改為 qty),但權(quán)限仍與使用 title_id 的視圖上的權(quán)限相同。
n
是表示 column 可重復 n 次的占位符。
WITH ENCRYPTION
加密 syscomments 表中包含 ALTER VIEW 語句文本的條目。使用 WITH ENCRYPTION 可防止將視圖作為 SQL Server 復制的一部分發(fā)布。
SCHEMABINDING
將視圖綁定到架構(gòu)上。指定 SCHEMABINDING 時,select_statement 必須包含由所引用的表、視圖或用戶定義函數(shù)組成的兩部分名稱 (owner.object)。
不能除去參與到用架構(gòu)綁定子句創(chuàng)建的視圖中的視圖或表,除非該視圖已被除去或更改而不再具有架構(gòu)綁定。否則,SQL Server 會產(chǎn)生錯誤。另外,對于參與具有架構(gòu)綁定的視圖的表,如果其上的 ALTER TABLE 語句影響了該視圖的定義,則這些語句將會失敗。
VIEW_METADATA
在為引用視圖的查詢請求瀏覽模式元數(shù)據(jù)時,指定 SQL Server 將向 DBLIB、ODBC 和 OLE DB API 返回有關(guān)視圖的元數(shù)據(jù)信息,而不是返回基表或表。瀏覽模式元數(shù)據(jù)是由 SQL Server 向客戶端 DB-LIB、ODBC 和 OLE DB API 返回的附加元數(shù)據(jù),它允許客戶端 API 實現(xiàn)可更新的客戶端游標。瀏覽模式元數(shù)據(jù)包含有關(guān)結(jié)果集內(nèi)的列所屬基表的信息。
對于用 VIEW_METADATA 選項創(chuàng)建的視圖,當在結(jié)果集中描述視圖內(nèi)的列時,瀏覽模式元數(shù)據(jù)返回相對于基表名的視圖名。
當用 VIEW_METADATA 創(chuàng)建視圖時,如果該視圖具有 INSERT 或 UPDATE INSTEAD OF 觸發(fā)器,則視圖的所有列(timestamp 除外)都是可更新的。請參見 CREATE VIEW 中的"可更新視圖"。
AS
是視圖要執(zhí)行的操作。
select_statement
是定義視圖的 SELECT 語句。
WITH CHECK OPTION
強制視圖上執(zhí)行的所有數(shù)據(jù)修改語句都必須符合由定義視圖的 select_statement 設(shè)置的準則。
有關(guān) ALTER VIEW 的更多信息,請參見 CREATE VIEW 中的注釋。
說明 如果原來的視圖定義是用 WITH ENCRYPTION 或 CHECK OPTION 創(chuàng)建的,那么只有在 ALTER VIEW 中也包含這些選項時,這些選項才有效。
如果使用 ALTER VIEW 更改當前正在使用的視圖,Microsoft® SQL Server™ 將在該視圖上放一個排它架構(gòu)鎖。當鎖已授予,并且該視圖沒有活動用戶時,SQL Server 將從過程緩存中刪除該視圖的所有復本。引用該視圖的現(xiàn)有計劃將繼續(xù)保留在緩存中,但當喚醒調(diào)用時將重新編譯。
ALTER VIEW 可應用于索引視圖。然而,ALTER VIEW 將無條件地除去視圖上的所有索引。
ALTER VIEW 的權(quán)限默認地授予 db_owner 和 db_ddladmin 固定數(shù)據(jù)庫角色的成員,以及視圖所有者。這些權(quán)限是不可傳遞的。
若要更改視圖,用戶必須具有 ALTER VIEW 權(quán)限,并且對視圖中引用的表、視圖和表值函數(shù)具有 SELECT 權(quán)限,對視圖中調(diào)用的標量值函數(shù)具有 EXECUTE 權(quán)限。
此外,用戶若要更改視圖 WITH SCHEMABINDING,則必須對每一個引用的表、視圖和用戶定義函數(shù)具有 REFERENCES 權(quán)限。
下例創(chuàng)建稱為 All_authors 的視圖,該視圖包含全部的作者。權(quán)限授予了視圖,但需求改為從猶他州選擇作者。于是,使用 ALTER VIEW 替換了該視圖。
-- Create a view from the authors table that contains all authors.
CREATE VIEW All_authors (au_fname, au_lname, address, city, zip)
AS
SELECT au_fname, au_lname, address, city, zip
FROM pubs..authors
GO
-- Grant SELECT permissions on the view to public.
GRANT SELECT ON All_authors TO public
GO
-- The view needs to be changed to include all authors
-- from Utah.
-- If ALTER VIEW is not used but instead the view is dropped and
-- re-created, the above GRANT statement and any other statements
-- dealing with permissions that pertain to this view
-- must be re-entered.
ALTER VIEW All_authors (au_fname, au_lname, address, city, zip)
AS
SELECT au_fname, au_lname, address, city, zip
FROM pubs..authors
WHERE state = 'UT'
GO
下例使用 @@ROWCOUNT 函數(shù)作為視圖定義的一部分。
USE pubs
GO
CREATE VIEW yourview
AS
SELECT title_id, title, mycount = @@ROWCOUNT, ytd_sales
FROM titles
GO
SELECT *
FROM yourview
GO
-- Here, the view is altered.
USE pubs
GO
ALTER VIEW yourview
AS
SELECT title, mycount = @@ ROWCOUNT, ytd_sales
FROM titles
WHERE type = 'mod_cook'
GO
SELECT *
FROM yourview
GO
相關(guān)文章