適用於:SQL Server
Azure SQL 資料庫 Azure SQL 受控執行個體
Azure Synapse Analytics Analytics Platform System (PDW)
SQL 分析端點在
Microsoft Fabric SQL 資料庫中Microsoft網
狀架構倉儲中的 SQL 分析端點Microsoft網狀架構
建立由查詢定義其內容 (資料行和資料列) 的虛擬資料表。 您可以使用這個陳述式來建立資料庫中一個或多個資料表內資料的檢視。 例如,檢視可用於下列目的:
對焦 (Focus)、簡化和自訂每位使用者查看資料庫的角度。
做為安全機制,讓使用者能夠透過檢視存取資料,但不將直接存取基底資料表的權限授與使用者。
提供回溯相容介面以模擬其結構描述已變更的資料表。
語法
SQL Server 和 Azure SQL Database 的語法。
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
Azure Synapse Analytics 和平行處理數據倉儲的語法。
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Microsoft網狀架構數據倉儲和 SQL 分析端點的語法。
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ] AS <select_statement>
[;]
<view_attribute> ::=
{
[ SCHEMABINDING ]
}
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
引數
OR ALTER
適用於:Azure SQL Database 和 SQL Server (從 SQL Server 2016 (13.x) SP1 開始)。
只有在檢視已存在時,才能有條件地將其更改。
schema_name
這是檢視所屬的結構描述名稱。
view_name
這是檢視的名稱。 檢視名稱必須遵照識別碼的規則。 指定檢視擁有者名稱則是選擇性的。
欄
這是檢視中的資料行所用的名稱。 只有當數據行衍生自算術表達式、函式或常數時,才需要數據行名稱;當兩個或多個數據行可能具有相同的名稱時,通常是因為聯結;或當檢視中的數據行指定的名稱與衍生自該數據行的名稱不同時。 您也可以在 SELECT
語句中指派數據行名稱。
如果未指定 數據行 ,則檢視數據行會取得與 語句中 SELECT
數據行相同的名稱。
注意
在檢視的數據行中,不論基礎數據的來源為何,數據行名稱的許可權都會套用至 CREATE VIEW
或 ALTER VIEW
語句。 例如,如果在 CREATE VIEW 語句的數據行上 SalesOrderID
授與許可權, ALTER VIEW
語句就可以使用 不同的數據行名稱來命名 SalesOrderID
數據行,例如 OrderRef
,而且仍然具有與 SalesOrderID
檢視相關聯的許可權。
如
指定檢視要執行的動作。
select_statement
SELECT
定義檢視的語句。 陳述式可以使用多份資料表和其他檢視。 需要適當的許可權,才能從所建立檢視子句中所參考的對象中 SELECT
選取。
檢視不一定是一個特定數據表之數據列和數據行的子集。 您可以建立一個檢視,使用一個以上的數據表或其他檢視搭配 SELECT
任何複雜度子句的檢視。
在索引檢視表定義中 SELECT
,語句必須是單一數據表語句或具有選擇性匯總的多數據表 JOIN
。
SELECT
檢視定義中的子句不能包含:
子
ORDER BY
句,除非語句的選取清單中TOP
也有SELECT
子句重要
子
ORDER BY
句僅用於判斷檢視定義中 或TOP
子句所OFFSET
傳回的數據列。 子ORDER BY
句不保證在查詢檢視時排序的結果,除非ORDER BY
查詢本身也指定。INTO
關鍵詞子
OPTION
句指向暫存資料表或資料表變數的參考。
因為 select_statement 使用 SELECT
語句,所以使用 子句中指定的 FROM
聯結提示和數據表提示是有效的。 如需詳細資訊,請參閱 FROM (Transact-SQL) 和 SELECT (Transact-SQL)。
在 SELECT
中,可以使用 或 UNION
分隔UNION ALL
的函式和多個語句。
CHECK OPTION
強制規定對檢視執行的所有資料修改陳述式必須遵循 select_statement 內所設定的準則。 透過檢視修改數據列時, WITH CHECK OPTION
可確保在認可修改之後,數據會透過檢視保持可見。
注意
CHECK OPTION
僅適用於透過檢視進行的更新。 其不適用於任何直接對檢視基礎資料表執行的更新。
加密
適用於:SQL Server 2008 (10.0.x) 和更新版本,以及 Azure SQL Database。
加密包含語句文字的 CREATE VIEW
中的專案。 使用 WITH ENCRYPTION
可防止檢視發佈為 SQL Server 複寫的一部分。
SCHEMABINDING
將檢視繫結於一或多份基礎資料表的結構描述。 指定時 SCHEMABINDING
,基表或數據表無法以會影響檢視定義的方式進行修改。 您必須先修改或卸除檢視定義來移除對於要修改之資料表的相依性。 當您使用 SCHEMABINDING
時, select_statement 必須包含兩個部分的名稱(架構。物件)所參考的數據表、檢視或使用者定義函式。 所有參考的物件都必須在相同的資料庫中。
您無法卸除參與 SCHEMABINDING 子句所建立之檢視的檢視或資料表,除非這份檢視已經卸除或有了改變,不再擁有結構描述繫結。 否則,資料庫引擎會引發錯誤。 此外,當這些語句影響檢視定義時,參與架構系結之檢視表的數據表上執行 ALTER TABLE
語句也會失敗。
VIEW_METADATA
指定當針對參考檢視的查詢來要求瀏覽模式的中繼資料時,SQL Server 執行個體將檢視 (而不是一或多個基底資料表) 的中繼資料資訊傳回 DB-Library、ODBC 和 OLE DB API。 瀏覽模式中繼資料是 SQL Server 執行個體傳回給用戶端 API 的附加中繼資料。 這個中繼資料使得用戶端 API 能夠實作可更新的用戶端資料指標。 瀏覽模式中繼資料包括結果集中的資料行所屬之基底資料表的相關資訊。
對於使用 VIEW_METADATA
建立的檢視,流覽模式元數據會傳回檢視名稱,而不是在結果集中描述檢視中的數據行時,傳回基表名稱。
使用 WITH VIEW_METADATA
建立檢視時,如果檢視具有 或 INSTEAD OF INSERT
觸發程式,則INSTEAD OF UPDATE
數據行以外的所有數據行都可以更新。 如需有關可更新檢視的詳細資訊,請參閱「備註」一節。
備註
檢視只能建立在目前資料庫中。
CREATE VIEW
必須是查詢批次中的第一個語句。 檢視最多可有 1,024 個資料行。
當查詢檢視時,資料庫引擎會檢查以確定陳述式所參考的所有資料庫物件都存在、在陳述式的內容中有效,且修改資料陳述式未違反任何資料完整性規則。 檢查失敗會傳回錯誤訊息。 檢查成功會將動作轉換成針對基礎資料表的動作。
如果檢視相依於已卸除的資料表或檢視,當任何人試圖使用該檢視時,資料庫引擎一律會產生錯誤訊息。 如果建立新的資料表或檢視,且並未變更先前基底資料表的資料表結構來取代已卸除的資料表或檢視,此時又可以使用這份檢視。 如果新資料表或檢視的結構有了改變,就必須卸除再重新建立這份檢視。
如果未使用 SCHEMABINDING
子句建立檢視,請在對影響檢視定義之檢視基礎的對象進行變更時,執行 sp_refreshview 。 否則,在查詢檢視時,可能會產生非預期的結果。
建立檢視時,檢視的相關資訊會儲存在下列目錄檢視中:sys.views、sys.columns 和 sys.sql_expression_dependencies。 語句的 CREATE VIEW
文字會儲存在 sys.sql_modules 目錄檢視中。
在以 數值 或 浮點 表達式定義的檢視上使用索引的查詢,其結果可能與不使用檢視上索引的類似查詢不同。 此差異可能是在、 INSERT
或 DELETE
基礎表上的動作期間UPDATE
四捨五入錯誤所造成。
Database Engine 會在建立檢視時儲存 和 SET QUOTED_IDENTIFIER
SET ANSI_NULLS
的設定。 當使用這份檢視時,會利用這些原始設定來剖析檢視。 因此,存取檢視時,和 SET QUOTED_IDENTIFIER
的任何用戶端會話設定SET ANSI_NULLS
並不會影響檢視定義。
在 Azure Synapse Analytics 中,檢視不支持架構系結。 因此,如果對基礎對象進行變更,您應該卸除並重新建立檢視以重新整理基礎元數據。 如需詳細資訊,請參閱 Azure Synapse Analytics 中專用 SQL 集區和無伺服器 SQL 集區的 T-SQL 檢視。
在 Azure Synapse Analytics 中,不支援可更新的檢視、DML 觸發程式(類型 AFTER
為 或 INSTEAD OF
),且不支援數據分割檢視。 如需詳細資訊,請參閱 Azure Synapse Analytics 中專用 SQL 集區和無伺服器 SQL 集區的 T-SQL 檢視。
在 Azure Synapse Analytics 中,不支持數據分割檢視。 如需詳細資訊,請參閱 Azure Synapse Analytics 中專用 SQL 集區和無伺服器 SQL 集區的 T-SQL 檢視。
在 Fabric SQL 資料庫中,可以建立檢視,但檢視不會 鏡像到 Fabric OneLake。 如需詳細資訊,請參閱 網狀架構 SQL 資料庫鏡像的限制。
可更新的檢視
只要符合下列條件,您可以利用檢視來修改基礎基底資料表的資料:
任何修改,包括
UPDATE
、INSERT
和DELETE
語句,都必須只參考一個基表的數據行。檢視所修改的資料行必須直接參考資料表資料行中的基礎資料。 您無法利用任何其他方法來衍生這些資料行,例如:
聚合函數:
AVG
、、、COUNT
、SUM
、MIN
MAX
GROUPING
STDEV
STDEVP
、VAR
和 。VARP
計算。 您不能從使用其他資料行的運算式計算資料行。 利用設定運算子 UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT 形成的資料行會得出一項計算,這些資料行無法更新。
正在修改的數據行不會受到
GROUP BY
、HAVING
或DISTINCT
子句的影響。在檢視 select_statement 和
WITH CHECK OPTION
子句中,不會使用 TOP。
先前的限制適用於檢視之 FROM 子句中的任何子查詢,正如同它們適用於檢視本身一樣。 一般而言,資料庫引擎必須能夠明確地追蹤從檢視定義到一個基底資料表的修改。 如需詳細資訊,請參閱透過檢視修改資料。
如果先前的限制使您無法直接利用檢視來修改資料,請考量下列選項:
INSTEAD OF 觸發程式
INSTEAD OF
您可以在檢視上建立觸發程式,讓檢視更新。 觸發INSTEAD OF
程式會執行,而不是定義觸發程式的數據修改語句。 這個觸發程序可讓使用者指定一組為了處理資料修改陳述式而必須發生的動作。 因此,如果INSTEAD OF
特定數據修改語句 (INSERT
、UPDATE
或DELETE
) 上的檢視存在觸發程式,則對應的檢視可透過該語句進行更新。 如需觸發程式的詳細資訊INSTEAD OF
,請參閱 DML 觸發程式。數據分割檢視
如果檢視是一份分割區檢視,在特定限制之下,這份檢視可以更新。 如有必要,資料庫引擎會將本機資料分割檢視當做所有參與資料表及檢視本身是在相同 SQL Server 執行個體上的檢視,並將分散式資料分割檢視當做檢視中至少有一個資料表是在不同伺服器或遠端伺服器上的檢視。
分割的檢視
數據分割檢視是由以相同方式結構化的成員數據表所定義的 UNION ALL
檢視,但分別儲存為相同 SQL Server 實例或 SQL Server 伺服器的一組自發實例中,稱為同盟資料庫伺服器的多個數據表。
注意
在伺服器本機分割資料的慣用方法是透過分割區資料表。 如需詳細資訊,請參閱< Partitioned Tables and Indexes>。
當您設計數據分割配置時,它必須清楚哪些數據屬於每個分割區。 例如,Customers
資料表的資料散發在三個伺服器位置的三份成員資料表中:Customers_33
的 Server1
、Customers_66
的 Server2
,以及 Customers_99
的 Server3
。
Server1
的分割區檢視定義如下:
--Partitioned view as defined on Server1
CREATE VIEW Customers
AS
--Select from local member table.
SELECT *
FROM CompanyData.dbo.Customers_33
UNION ALL
--Select from member table on Server2.
SELECT *
FROM Server2.CompanyData.dbo.Customers_66
UNION ALL
--Select from member table on Server3.
SELECT *
FROM Server3.CompanyData.dbo.Customers_99;
一般而言,如果檢視的形式如下,它便是一份分割區檢視:
SELECT <select_list1>
FROM T1
UNION ALL
SELECT <select_list2>
FROM T2
UNION ALL
...
SELECT <select_listn>
FROM Tn;
建立數據分割檢視的條件
選取
list
在檢視定義的資料行清單中,選取成員資料表中的所有資料行。
確認每份
select list
相同序數位置中的資料行都是相同類型,包括定序。 數據行不足以隱含轉換成可轉換類型,這通常是 的情況UNION
。另外,至少必須有一個資料行 (如
<col>
) 出現在所有選取清單的相同序數位置中。 透過讓成員資料表<col>
分別在T1, ..., Tn
上具有 CHECK 條件約束C1, ..., Cn
的方式來定義<col>
。C1
資料表所定義之T1
條件約束的形式必須如下:C1 ::= < simple_interval > [ OR < simple_interval > OR ...] < simple_interval > :: = < col > { < | > | \<= | >= | = < value >} | < col > BETWEEN < value1 > AND < value2 > | < col > IN ( value_list ) | < col > { > | >= } < value1 > AND < col > { < | <= } < value2 >
條件約束的方式必須讓
<col>
的任何指定值都能夠滿足C1, ..., Cn
等條件約束中的最多一項條件約束;因此,這些條件約束會形成一組無關聯或不重疊的間隔。 定義無關聯的條件約束之<col>
資料行稱為分割區資料行。 數據分割數據行在基礎表中可以有不同的名稱。 條件約束必須在已啟用和受信任的狀態中,才能符合先前所提到的分割資料行條件。 如果停用條件約束,請使用CHECK CONSTRAINT *constraint_name*
的ALTER TABLE
選項重新啟用條件約束檢查,並使用WITH CHECK
選項來驗證條件約束。下列範例會顯示各組有效的條件約束:
{ [col < 10], [col between 11 and 20] , [col > 20] } { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }
在選取清單中,不能重複使用相同的資料行。
資料分割資料行
分割區資料行是資料表 PRIMARY KEY 的一部分。
它不能是計算、識別、預設或 timestamp 資料行。
如果成員資料表的相同資料行有多個條件約束,Database Engine 會忽略所有條件約束,當判斷檢視是否為分割區檢視時,並不會考量它們。 若要符合分割檢視的條件,分割資料行只應該有一項分割區條件約束。
對於分割區資料行能不能更新並沒有任何限制。
成員資料表,或基礎資料表
T1, ..., Tn
這些資料表可以是本機資料表,或是來自執行 SQL Server 之其他電腦的資料表 (可透過四部分名稱或基於 OPENDATASOURCE 或 OPENROWSET 的名稱來參考)。 OPENDATASOURCE 和 OPENROWSET 語法可以指定資料表名稱,但不能是傳遞查詢。 如需詳細資訊,請參閱 OPENDATASOURCE (Transact-SQL) 和 OPENROWSET (Transact-SQL)。
如果一或多份成員資料表在遠端,這份檢視便稱為「分散式分割區檢視」,且適用其他條件。 本章節稍後會加以說明。
相同的數據表不能出現在與
UNION ALL
語句結合的數據表集合中兩次。成員資料表不能有資料表的計算資料行所建立的索引。
成員資料表在相同數目的資料行上,具備所有 PRIMARY KEY 條件約束。
檢視中所有成員資料表都有相同的 ANSI 填補設定。 這可以使用中的
sp_configure
選項或 SET 語句來設定。
修改數據分割檢視中數據的條件
下列限制適用於在分割區檢視中修改資料的陳述式:
語句
INSERT
會提供檢視中所有數據行的值,即使基礎成員數據表具有DEFAULT
這些數據行的條件約束,或是允許值也一NULL
樣。 對於具有DEFAULT
定義的成員數據表數據行,語句不能明確地使用 關鍵詞DEFAULT
。插入資料分割資料列的值至少滿足其中一個基礎條件約束:否則,插入動作會因為條件約束違規而失敗。
UPDATE
語句不能將DEFAULT
關鍵詞指定為 子句中的SET
值,即使數據行在對應的成員數據表中定義值也一DEFAULT
樣。檢視中屬於一或多個成員數據表中標識列的數據行無法使用 或
INSERT
語句來修改UPDATE
。如果其中一個成員數據表包含時間戳數據行,則無法使用 或
INSERT
語句來修改UPDATE
數據。如果其中一個成員數據表包含觸發程式或 或
ON UPDATE CASCADE/SET NULL/SET DEFAULT
ON DELETE CASCADE/SET NULL/SET DEFAULT
條件約束,則無法修改檢視。INSERT
UPDATE
如果具有同一個檢視或語句中任何成員數據表的自我聯結,則不允許對數據分割檢視執行、 和DELETE
動作。或
bcp
和BULK INSERT
語句不支援INSERT ... SELECT * FROM OPENROWSET(BULK...)
將數據大容量導入數據分割檢視。 不過,您可以使用 INSERT 陳述式,將多個資料列插入資料分割檢視中。注意
若要更新數據分割檢視,用戶必須擁有
INSERT
成員數據表的、UPDATE
和DELETE
許可權。
分散式分割檢視的其他條件
分散式分割區檢視 (當一或多份成員資料表是在遠端) 適用下列其他條件:
分散式交易會啟動,以確保更新所影響之所有節點的不可部分完成性。
將
XACT_ABORT SET
、ON
或INSERT
語句的選項UPDATE
DELETE
設定為 可運作。針對 smallmoney 類型之遠端資料表中的任何資料行,如果它們受到資料分割檢視所參考,則系統會將這些資料行對應為 money。 因此,本機資料表中對應的資料行 (在選取清單的相同序數位置中) 也必須為 money 類型。
在資料庫相容性層級 110 以上的情況下,針對 smalldatetime 類型之遠端資料表中的任何資料行,如果它們受到資料分割檢視所參考,則系統會將這些資料行對應為 smalldatetime。 本機資料表中對應的資料行 (在選取清單的相同序數位置中) 必須為 smalldatetime。 這是舊版 SQL Server 的行為變更;針對 smalldatetime 類型之遠端資料表中的任何資料行,如果它們受到資料分割檢視所參考,則系統會將這些資料行對應為 datetime,且本機資料表中對應的資料行必須為 datetime 類型。 如需詳細資訊,請參閱 ALTER DATABASE 相容性層級 (Transact-SQL)。
分割區檢視中的任何連結伺服器都不能是回送連結伺服器。 這是指向相同 SQL Server 執行個體的連結伺服器。
對於涉及可更新的資料分割檢視和遠端資料表的、 與動作,會忽略SET ROWCOUNT
選項的設定INSERT
。UPDATE
DELETE
當成員資料表和資料分割檢視定義都備妥時,SQL Server 查詢最佳化工具會建立智慧型計畫,有效地利用查詢來存取成員資料表中的資料。 使用 CHECK
條件約束定義時,查詢處理器會將索引鍵值的分佈對應到成員數據表。 當使用者發出查詢時,查詢處理器會比較對應與 子句中指定的 WHERE
值,並建置執行計劃,並在成員伺服器之間傳輸最少的數據量。 因此,如果某些成員數據表位於遠端伺服器,SQL Server 實例會解析分散式查詢,因此必須傳輸的分散式數據量最少。
復寫的考慮
若要在複寫所涉及的成員資料表上建立分割區檢視,適用下列考量:
如果基礎資料表包括合併式複寫或具有可更新訂閱的異動複寫,請確認選取清單也包括 uniqueidentifier 資料行。
分割檢視中的任何
INSERT
動作都必須提供NEWID()
uniqueidentifier 數據行的值。 任何針對 uniqueidentifier 數據行的 UPDATE 動作都必須提供NEWID()
做為值,因為無法使用 DEFAULT 關鍵詞。利用檢視來進行的更新複寫與在兩個不同的資料庫中複寫資料表相同;這些資料表由不同複寫代理程式來提供,無法保證更新的順序。
權限
至少必須有資料庫中的 CREATE VIEW 權限,以及正在建立之檢視表所在之結構描述的 ALTER 權限。
範例
下列範例使用 AdventureWorks2022
或 AdventureWorksDW2022
資料庫。
A。 使用 CREATE VIEW 建立檢視
下列範例會使用 SELECT
語句建立檢視。 當資料行組合的查詢頻率很高時,簡單檢視非常有用。 此檢視中的數據來自 HumanResources.Employee
AdventureWorks2022 資料庫的 和 Person.Person
數據表。 該資料提供 Adventure Works Cycles 員工的姓名和雇用日期資訊。 您可以為主管追蹤工作週年記錄的人建立這份檢視,但不提供他存取這些資料表所有資料的權利。
CREATE VIEW hiredate_view
AS
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate
FROM HumanResources.Employee AS e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
B. 使用WITH ENCRYPTION
下列範例會使用 WITH ENCRYPTION
選項,且會顯示計算資料行、重新命名的資料行和多個資料行。
適用於:SQL Server 2008 (10.0.x) 和更新版本,以及 SQL Database。
CREATE VIEW Purchasing.PurchaseOrderReject
WITH ENCRYPTION
AS
SELECT PurchaseOrderID, ReceivedQty, RejectedQty,
RejectedQty / ReceivedQty AS RejectRatio, DueDate
FROM Purchasing.PurchaseOrderDetail
WHERE RejectedQty / ReceivedQty > 0
AND DueDate > CONVERT(DATETIME,'20010630',101) ;
GO
C. 使用WITH CHECK OPTION
下列範例會顯示一份名稱為 dbo.SeattleOnly
的檢視,這份檢視參考五份資料表,可讓資料修改只套用在居住在 Seattle 的員工。
CREATE VIEW dbo.SeattleOnly
AS
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress bea
ON bea.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = bea.AddressID
INNER JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
WHERE a.City = 'Seattle'
WITH CHECK OPTION ;
GO
D. 在檢視中使用內建函式
下列範例會顯示包括內建函數的檢視定義。 當您使用函數時,您必須指定衍生資料行的資料行名稱。
CREATE VIEW Sales.SalesPersonPerform
AS
SELECT TOP (100) SalesPersonID, SUM(TotalDue) AS TotalSales
FROM Sales.SalesOrderHeader
WHERE OrderDate > CONVERT(DATETIME,'20001231',101)
GROUP BY SalesPersonID;
GO
E. 使用分割區數據
下列範例會使用名稱為 SUPPLY1
、SUPPLY2
、SUPPLY3
和 SUPPLY4
的資料表。 這些數據表對應到位於不同區域的四個辦公室的供應商數據表。
--Create the tables and insert the values.
CREATE TABLE dbo.SUPPLY1 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY2 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY3 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY4 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600),
supplier CHAR(50)
);
GO
--Create the view that combines all supplier tables.
CREATE VIEW dbo.all_supplier_view
WITH SCHEMABINDING
AS
SELECT supplyID, supplier
FROM dbo.SUPPLY1
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY2
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY3
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY4;
GO
INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')
, ('231', 'FarEast'), ('280', 'NZ')
, ('321', 'EuroGroup'), ('442', 'UKArchip')
, ('475', 'India'), ('521', 'Afrique');
GO
範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
F. 聯結兩個資料表以建立檢視
下列範例會利用 SELECT
陳述式與 OUTER JOIN
來建立檢視。 將聯結查詢的結果填入檢視。
CREATE VIEW view1
AS
SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey,
fis.SalesTerritoryKey, dst.SalesTerritoryRegion
FROM FactInternetSales AS fis
LEFT OUTER JOIN DimSalesTerritory AS dst
ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey);
相關內容
- ALTER TABLE (Transact-SQL)
- ALTER VIEW (Transact-SQL)
- DELETE (Transact-SQL)
- DROP VIEW (Transact-SQL)
- INSERT (Transact-SQL)
- 建立預存程序
- sys.dm_sql_referenced_entities (Transact-SQL)
- sys.dm_sql_referencing_entities (Transact-SQL)
- sp_help (Transact-SQL)
- sp_helptext (Transact-SQL)
- sp_refreshview (Transact-SQL)
- sp_rename (Transact-SQL)
- sys.views (Transact-SQL)
- UPDATE (Transact-SQL)
- EVENTDATA (Transact-SQL)