AdventureWorks 中的結構描述

在 AdventureWorks 範例 OLTP 資料庫中,如資料表、檢視及程序等物件都包含於結構描述內。結構描述改變了存取這些物件的方式。此主題提供結構描述的簡短概觀,描述結構描述在 AdventureWorks 資料庫內的使用方式,而且提供存取結構描述內含之物件的方法及替換選項。

AdventureWorks 中的結構描述

在 SQL Server 2005 和更新版本中,結構描述與使用者是分開的:依據資料庫的原則,使用者擁有結構描述,而物件則內含於結構描述。如需詳細資訊,請參閱<使用者結構描述分隔>。

下表描述用於 AdventureWorks 的結構描述,並列出每個結構描述內的代表資料表。

結構描述

包含的關聯物件

範例

HumanResources

Adventure Works Cycles 的員工。

Employee 資料表

Department 資料表

Person

包含個別客戶、供應商和員工的名稱與地址資訊。

Contact 資料表

Address 資料表

StateProvince 資料表

Production

Adventure Works Cycles 製造及銷售的產品。

BillOfMaterials 資料表

Product 資料表

WorkOrder 資料表

Purchasing

向其採購零件與產品的供應商。

PurchaseOrderDetail 資料表

PurchaseOrderHeader 資料表

Vendor 資料表

Sales

客戶和銷售相關資料。

Customer 資料表

SalesOrderDetail 資料表

SalesOrderHeader 資料表

存取結構描述中的內含物件

使用者永遠具有預設的結構描述。當伺服器在解析 DML 或 DDL 陳述式中所指定之不合格物件的名稱時,其所搜尋的結構描述即是預設的結構描述。因此,參考預設結構描述中的物件時,不需要指定結構描述名稱。例如,如果 table_name 位於預設的結構描述中,陳述式 SELECT * FROM table_name 就能成功執行。

[!附註]

建立使用者時如果沒有指定預設結構描述,則預設的結構描述會是 dbo。如需詳細資訊,請參閱<CREATE USER (Transact-SQL)>。

若要存取預設結構描述以外的結構描述物件,至少必須指定兩個部份組成的識別碼 (schema_name**.**object_name)。對於參考結構描述範圍內物件的所有 DDL 和 DML 陳述式而言,一定要使用這種方式。

下列範例使用兩個 SELECT 陳述式,顯示如何參考預設結構描述外的物件。假設預設的結構描述不是 HumanResources,則第一個陳述式會失敗,因為 Department 資料表沒有包含在預設的結構描述內。第二個陳述式會成功,因為它指定了包含該物件的結構描述。

USE AdventureWorks;
GO
--This statement fails.
SELECT Name, GroupName
FROM Department;
GO
--This statement succeeds.
SELECT Name, GroupName
FROM HumanResources.Department;
GO

AdventureWorks 中結構描述的替換選項

《SQL Server 線上叢書》中的程式碼範例以及能夠與 SQL Server 一起安裝的其他範例,為所有的結構描述範圍內物件至少指定了兩個部份的識別碼。無論使用者預設的結構描述為何,這些範例仍然能夠成功執行。

想要在自己的範例和測試中使用 AdventureWorks 的使用者,可能會想要使用不同於指定兩個部份識別碼的方法。SQL Server 在 SQLServerEngineSamples.msi 中提供指令碼,此檔案提供兩個在 AdventureWorks 中使用結構描述的其他方法。

傳送物件到 DBO 結構描述

指令碼 AlterSchemaToDbo.sql 會將 AdventureWorks 中結構描述範圍內的每個物件傳送到 dbo 結構描述。執行此指令碼後,具有 dbo 之預設結構描述的使用者,在參考 DDL 和 DML 陳述式中的 AdventureWorks 物件時,就不一定需要使用兩個部份的識別碼。

重要注意事項重要事項

程式碼範例和 SQL Server 提供的範例,在執行 AlterSchemaToDbo.sql 後將不會執行,除非程式碼中指定的結構描述名稱已使用 dbo 加以替換或移除。

指令碼 AlterSchemaFromDbo.sql 會將 dbo 結構描述中的物件,傳送或傳回到執行該指令碼之前這些物件所在的結構描述中。

使用同義字

同義字是指定給結構描述範圍內物件的另一個名稱。指定的同義字是用來取代 DDL 與 DML 陳述式中的基底物件。

指令碼 CreateSynonymsDbo.sql 會為 AdventureWorks 中每個結構描述範圍物件建立一個同義字。同義字名稱與基底物件名稱相同,但是使用的是 dbo 結構描述。例如,HumanResources.Department 的同義字是 dbo.Department。這種方式有以下好處:

  • 如果 dbo 是預設結構描述,那麼就不需要在 DDL 與 DML 陳述式中使用兩個部份的識別碼來指定這些物件。

  • 此時可以使用程式碼範例及 SQL Server 提供的範例,而且不需要修改。

指令碼 DropSynonymsDbo.sql 會卸除由 CreateSynonymsDbo.sql 指令碼建立的同義字。如需有關同義字的詳細資訊,請參閱<使用同義字>。