SQLServer之修改視圖

修改視圖注意事項

修改先前建立的視圖。 其中包括索引視圖。 ALTER VIEW不影響相關的存儲過程或觸發器,而且不會更改權限。數據庫

若是原來的視圖定義是使用 WITH ENCRYPTION 或 CHECK OPTION建立的,則只有在 ALTER VIEW 中也包含這些選項時,纔會啓用這些選項。緩存

若是當前所用的視圖使用 ALTER VIEW 來修改,則數據庫引擎使用對該視圖的排他架構鎖。 在授予鎖時,若是該視圖沒有活動用戶,則數據庫引擎將從過程緩存中刪除該視圖的全部副本。 引用該視圖的現有計劃將繼續保留在緩存中,但一旦被調用就會從新編譯。架構

ALTER VIEW可應用於索引視圖,可是,ALTER VIEW會無條件地刪除視圖的全部索引。函數

若要執行 ALTER VIEW,至少須要具備對 OBJECT 的 ALTER 權限。工具

使用SSMS數據庫管理工具修改視圖

一、鏈接數據庫,選擇數據庫,展開數據庫-》展開視圖-》選擇要修改的視圖-》選擇設計。加密

clipboard.png

二、在關係圖窗格中-》修改視圖-》修改完成,點擊保存。spa

clipboard.png

三、使用修改的視圖。設計

clipboard.png

使用T-SQL腳本修改視圖

語法:

--聲明數據庫引用
use 數據庫名;
go對象

--修改視圖
alter view 架構名視圖名
with encryption,schemabinding,view_metadata
as
select_statement
[check option];
goblog

語法解析:

schema_name
視圖所屬架構的名稱。

view_name
要更改的視圖。

column
將成爲指定視圖的一部分的一個或多個列的名稱(以逗號分隔)。

encryption
適用範圍: SQL Server 2008 到 SQL Server 2017 和 Azure SQL Database。

加密 sys.syscomments 中包含 ALTER VIEW 語句文本的項。 WITH ENCRYPTION 可防止視圖做爲 SQL Server 複製的一部分進行發佈。

schemabinding
將視圖綁定到基礎表的架構。 若是指定了 SCHEMABINDING,則不能以可影響視圖定義的方式來修改基表。 必須首先修改或刪除視圖定義自己,而後才能刪除要修改的表的相關性。 使用 SCHEMABINDING 時,select_statement 必須包含所引用的表、視圖或用戶定義函數的兩部分名稱 (schema.object)。 全部被引用對象都必須在同一個數據庫內。

不能刪除參與使用 SCHEMABINDING 子句建立的視圖的表或視圖,除非該視圖已被刪除或更改,而再也不具備架構綁定。 不然, 數據庫引擎將引起錯誤。 另外,若是對參與具備架構綁定的視圖的表執行 ALTER TABLE 語句,而這些語句又會影響視圖定義,則這些語句將會失敗。

view_metadata
指定爲引用視圖的查詢請求瀏覽模式的元數據時, SQL Server 實例將向 DB-Library、ODBC 和 OLE DB API 返回有關視圖的元數據信息,而不返回基表的元數據信息。 瀏覽模式的元數據是 數據庫引擎實例返回到客戶端 DB-Library、ODBC 和 OLE DB API 的額外元數據。 若是使用此元數據,客戶端 API 將能夠實現可更新客戶端遊標。 瀏覽模式的元數據包含結果集中的列所屬的基表的相關信息。

對於使用 VIEW_METADATA 建立的視圖,瀏覽模式的元數據在描述結果集內視圖中的列時,將返回視圖名,而不返回基表名。

使用 WITH VIEW_METADATA 建立視圖時,若是該視圖具備 INSERT 或 UPDATE INSTEAD OF 觸發器,則視圖的全部列(timestamp 列除外)均可更新。 有關詳細信息,請參閱 CREATE VIEW (Transact-SQL) 中的「註釋」部分。

as
視圖要執行的操做。

select_statement
定義視圖的 SELECT 語句。

with check option
要求對該視圖執行的全部數據修改語句都必須符合 select_statement 中所設置的條件。

示例:

--聲明數據庫引用
use testss;
go

--修改視圖
alter view dbo.view1
with encryption,schemabinding,view_metadata
as
select a.id,a.name,a.sex,a.height,b.id as classid
from dbo.test1 as a
inner join dbo.test3 as b on a.classid=b.id;
go

使用修改後的視圖

clipboard.png

相關文章
相關標籤/搜索