CREATE SCHEMA (Transact-SQL)
在目前資料庫中建立結構描述。CREATE SCHEMA 交易也可以在新結構描述中建立資料表和檢視表,以及設定這些物件的 GRANT、DENY 或 REVOKE 權限。
語法
CREATE SCHEMA schema_name_clause [ <schema_element> [ ...n ] ]
<schema_name_clause> ::=
{
schema_name
| AUTHORIZATION owner_name
| schema_name AUTHORIZATION owner_name
}
<schema_element> ::=
{
table_definition | view_definition | grant_statement |
revoke_statement | deny_statement
}
引數
schema_name
這是資料庫中結構描述的識別名稱。AUTHORIZATION owner_name
指定將擁有結構描述之資料庫層級主體的名稱。這個主體可能擁有其他結構描述,且可能不使用目前結構描述做為其預設結構描述。table_definition
指定在結構描述中建立資料表的 CREATE TABLE 陳述式。執行這個陳述式的主體必須具有目前資料庫的 CREATE TABLE 權限。view_definition
指定在結構描述中建立檢視表的 CREATE VIEW 陳述式。執行這個陳述式的主體必須具有目前資料庫的 CREATE VIEW 權限。grant_statement
指定授與新結構描述以外任何安全性實體之權限的 GRANT 陳述式。revoke_statement
指定撤銷新結構描述以外任何安全性實體之權限的 REVOKE 陳述式。deny_statement
指定拒絕新結構描述以外任何安全性實體之權限的 DENY 陳述式。
備註
[!附註]
允許包含 CREATE SCHEMA AUTHORIZATION 但不指定名稱之陳述式的目的,只是為了與舊版相容。
CREATE SCHEMA 可以在單一陳述式中建立結構描述、其所包含的資料表和檢視表,以及任何安全性實體的 GRANT、REVOKE 或 DENY 權限。這個陳述式必須以分隔批次來執行。由 CREATE SCHEMA 陳述式建立的物件,會建立在將要建立之結構描述的內部。
CREATE SCHEMA 交易不可部分完成。如果執行 CREATE SCHEMA 陳述式期間發生任何錯誤,將不會建立任何指定的安全性實體,也不會授與任何權限。
除了參考其他檢視表的檢視表之外,要用 CREATE SCHEMA 建立的安全性實體可以按任何順序排列。在這個情況下,被參考的檢視必須建立於參考它的檢視之前。
因此,GRANT 陳述式可以在物件本身建立之前授與物件的權限,或者 CREATE VIEW 陳述式可以出現在建立檢視表所參考之資料表的 CREATE TABLE 陳述式之前。此外,CREATE TABLE 陳述式可以宣告稍後在 CREATE SCHEMA 陳述式中所定義之資料表的外部索引鍵。
[!附註]
CREATE SCHEMA 陳述式內支援 DENY 和 REVOKE。DENY 和 REVOKE 子句會按其出現於 CREATE SCHEMA 陳述式中的順序來執行。
執行 CREATE SCHEMA 的主體可以指定其他資料庫主體做為要建立之結構描述的擁有者。此時需要本主題稍後「權限」一節所描述的其他權限。
新結構描述的擁有者是下列資料庫層級主體之一:資料庫使用者、資料庫角色或應用程式角色。結構描述中建立的物件是由結構描述擁有者所擁有,在 sys.objects 中具有 NULL principal_id。結構描述包含物件的擁有權可以轉移到任何資料庫層級主體,但結構描述擁有者恆保有結構描述中物件的 CONTROL 權限。
注意 |
---|
從 SQL Server 2005 開始,結構描述的行為已經變更。結果是,假設結構描述相當於資料庫使用者的程式碼可能不會傳回正確的結果。不應該在曾經使用下列任何一個 DDL 陳述式的資料庫中使用舊的目錄檢視 (包括 sysobjects):CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION。在此類資料庫中,必須改用新的目錄檢視。新的目錄檢視會考量 SQL Server 2005 中所導入的主體和結構描述的分隔。如需目錄檢視的詳細資訊,請參閱目錄檢視 (Transact-SQL)。 |
建立資料庫物件時,如果您將有效的網域主體 (使用者或群組) 指定為物件擁有者,則會將該網域主體加入至資料庫做為結構描述。新的結構描述將由該網域主體所擁有。
取代通知
目前支援不指定結構描述名稱之 CREATE SCHEMA 陳述式的目的,是為了與舊版相容。這些陳述式實際上並不會在資料庫中建立結構描述,但是會建立資料表和檢視表,以及授與權限。主體不需要 CREATE SCHEMA 權限來執行這個舊格式的 CREATE SCHEMA,因為不會建立任何結構描述。未來的 SQL Server 版本將移除這項功能。
權限
需要資料庫的 CREATE SCHEMA 權限。
若要建立 CREATE SCHEMA 陳述式中指定的物件,使用者必須具有對應的 CREATE 權限。
若要指定其他使用者做為建立之結構描述的擁有者,呼叫者必須具有該使用者的 IMPERSONATE 權限。如果指定資料庫角色做為擁有者,呼叫者必須具有下列項目之一:角色的成員資格或角色的 ALTER 權限。
[!附註]
為了語法與舊版相容,不會檢查任何 CREATE SCHEMA 權限,因為不會建立任何結構描述。
範例
下列範例會建立結構描述 Sprockets,這是由包含資料表 NineProngs 的 Annik 所擁有。陳述式授與 SELECT 給 Mandar,拒絕 SELECT 給 Prasanna。請注意,Sprockets 和 NineProngs 是在單一陳述式中建立。
USE AdventureWorks2008R2;
GO
CREATE SCHEMA Sprockets AUTHORIZATION Annik
CREATE TABLE NineProngs (source int, cost int, partnumber int)
GRANT SELECT ON SCHEMA::Sprockets TO Mandar
DENY SELECT ON SCHEMA::Sprockets TO Prasanna;
GO