視圖定義
視圖是一個虛擬的表,是一個表中的數據經過某種篩選后的顯示方式,視圖由一個預定義的查詢select語句組成。
使用SSMS數據庫管理工具創建視圖
1、連接數據庫,選擇數據庫,展開數據庫-》右鍵視圖-》選擇新建視圖。
2、在添加表彈出框-》選擇要創建視圖的表、視圖、函數、或者同義詞等-》點擊添加-》添加完成后選擇關閉。
3、在關系圖窗格中-》選擇表與表之間關聯的數據列-》選擇列的其他排序或篩選條件。
4、點擊保存或者ctrl+s-》刷新視圖-》查看結果。
5、使用視圖。
使用T-SQL腳本創建視圖
語法:
--聲明數據庫引用
use 數據庫名;
go
--判斷視圖是否存在,如果存在則刪除
if exists(select * from sys.views where name=視圖名稱)
drop view 視圖名稱;
go
--創建視圖
create
view
--視圖所屬架構的名稱。
--[schema_name][.]
--視圖名稱。 視圖名稱必須符合有關標識符的規則。 可以選擇是否指定視圖所有者名稱。
[dbo][.]視圖名稱
--視圖中的列使用的名稱。 僅在下列情況下需要列名:列是從算術表達式、函數或常量派生的;兩個或更多的列可能會具有相同的名稱(通常是由於聯接的原因);視圖中的某個列的指定名稱不同於其派生來源列的名稱。 還可以在 SELECT 語句中分配列名。
--如果未指定 column,則視圖列將獲得與 SELECT 語句中的列相同的名稱。
--[column]
[with]
--適用范圍: SQL Server 2008 到 SQL Server 2017 和 Azure SQL Database。
--對 sys.syscomments 表中包含 CREATE VIEW 語句文本的項進行加密。 使用 WITH ENCRYPTION 可防止在 SQL Server 復制過程中發布視圖。
[encryption][,]
--將視圖綁定到基礎表的架構。 如果指定了 SCHEMABINDING,則不能按照將影響視圖定義的方式修改基表或表。 必須首先修改或刪除視圖定義本身,才能刪除將要修改的表的依賴關系。
--使用 SCHEMABINDING 時,select_statement 必須包含所引用的表、視圖或用戶定義函數的兩部分名稱 (schema.object)。 所有被引用對象都必須在同一個數據庫內。
--不能刪除參與了使用 SCHEMABINDING 子句創建的視圖的視圖或表,除非該視圖已被刪除或更改而不再具有架構綁定。 否則, 數據庫引擎將引發錯誤。
--另外,如果對參與具有架構綁定的視圖的表執行 ALTER TABLE 語句,而這些語句又會影響視圖定義,則這些語句將會失敗。
[schemabinding][,]
--指定為引用視圖的查詢請求瀏覽模式的元數據時, SQL Server 實例將向 DB-Library、ODBC 和 OLE DB API 返回有關視圖的元數據信息,而不返回基表的元數據信息。
--瀏覽模式元數據是 SQL Server 實例向這些客戶端 API 返回的附加元數據。 如果使用此元數據,客戶端 API 將可以實現可更新客戶端游標。 瀏覽模式的元數據包含結果集中的列所屬的基表的相關信息。
--對於使用 VIEW_METADATA 創建的視圖,瀏覽模式的元數據在描述結果集內視圖中的列時,將返回視圖名,而不返回基表名。
--當使用 WITH VIEW_METADATA 創建視圖時,如果該視圖具有 INSTEAD OF INSERT 或 INSTEAD OF UPDATE 觸發器,則視圖的所有列(timestamp 列除外)都可更新。 有關可更新視圖的詳細信息,請參閱“備注”。
[view_metadata]
--指定視圖要執行的操作。
as
select_statement
go
示例:
--聲明數據庫引用
use testss;
go
--判斷視圖是否存在,如果存在則刪除
if exists(select * from sys.views where name='view1')
drop view view1;
go
--創建視圖
create
view
--視圖所屬架構的名稱。
--[schema_name][.]
--視圖名稱。 視圖名稱必須符合有關標識符的規則。 可以選擇是否指定視圖所有者名稱。
dbo.view1
--視圖中的列使用的名稱。 僅在下列情況下需要列名:列是從算術表達式、函數或常量派生的;兩個或更多的列可能會具有相同的名稱(通常是由於聯接的原因);視圖中的某個列的指定名稱不同於其派生來源列的名稱。 還可以在 SELECT 語句中分配列名。
--如果未指定 column,則視圖列將獲得與 SELECT 語句中的列相同的名稱。
--column
--with
--適用范圍: SQL Server 2008 到 SQL Server 2017 和 Azure SQL Database。
--對 sys.syscomments 表中包含 CREATE VIEW 語句文本的項進行加密。 使用 WITH ENCRYPTION 可防止在 SQL Server 復制過程中發布視圖。
--encryption,
--將視圖綁定到基礎表的架構。 如果指定了 SCHEMABINDING,則不能按照將影響視圖定義的方式修改基表或表。 必須首先修改或刪除視圖定義本身,才能刪除將要修改的表的依賴關系。
--使用 SCHEMABINDING 時,select_statement 必須包含所引用的表、視圖或用戶定義函數的兩部分名稱 (schema.object)。 所有被引用對象都必須在同一個數據庫內。
--不能刪除參與了使用 SCHEMABINDING 子句創建的視圖的視圖或表,除非該視圖已被刪除或更改而不再具有架構綁定。 否則, 數據庫引擎將引發錯誤。
--另外,如果對參與具有架構綁定的視圖的表執行 ALTER TABLE 語句,而這些語句又會影響視圖定義,則這些語句將會失敗。
--schemabinding,
--指定為引用視圖的查詢請求瀏覽模式的元數據時, SQL Server 實例將向 DB-Library、ODBC 和 OLE DB API 返回有關視圖的元數據信息,而不返回基表的元數據信息。
--瀏覽模式元數據是 SQL Server 實例向這些客戶端 API 返回的附加元數據。 如果使用此元數據,客戶端 API 將可以實現可更新客戶端游標。 瀏覽模式的元數據包含結果集中的列所屬的基表的相關信息。
--對於使用 VIEW_METADATA 創建的視圖,瀏覽模式的元數據在描述結果集內視圖中的列時,將返回視圖名,而不返回基表名。
--當使用 WITH VIEW_METADATA 創建視圖時,如果該視圖具有 INSTEAD OF INSERT 或 INSTEAD OF UPDATE 觸發器,則視圖的所有列(timestamp 列除外)都可更新。 有關可更新視圖的詳細信息,請參閱“備注”。
--view_metadata
--指定視圖要執行的操作。
as
select top(10000) a.id,a.age,a.height,a.name,b.id as classid from dbo.test1 as a
inner join dbo.test3 as b on a.classid=b.id
where a.classid<=100
order by a.id
--要求對該視圖執行的所有數據修改語句都必須符合 select_statement 中所設置的條件。 通過視圖修改行時,WITH CHECK OPTION 可確保提交修改后,仍可通過視圖看到數據。
--with check option;
go
示例結果: