CREATE SCHEMA (Transact-SQL)

更新日期: 2006 年 7 月 17 日

在当前数据库中创建架构。CREATE SCHEMA 事务还可以在新架构内创建表和视图,并可对这些对象设置 GRANT、DENY 或 REVOKE 权限。

主题链接图标Transact-SQL 语法约定

语法

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 语句。

备注

ms189462.note(zh-cn,SQL.90).gif注意:
允许包含 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 语句定义表之前声明表的外键。

ms189462.note(zh-cn,SQL.90).gif注意:
在 SQL Server 2005 中,CREATE SCHEMA 语句中支持 DENY 和 REVOKE。DENY 和 REVOKE 子句将按照它们在 CREATE SCHEMA 语句中出现的顺序执行。

执行 CREATE SCHEMA 的主体可以将另一个数据库主体指定为要创建的架构的所有者。完成此操作需要另外的权限,如本主题下文中的“权限”部分所述。

新架构由以下数据库级别主体之一拥有:数据库用户、数据库角色或应用程序角色。在架构内创建的对象由架构所有者拥有,这些对象在 sys.objects 中的 principal_id 为空。架构所包含对象的所有权可转让给任何数据库级别主体,但架构所有者始终保留对此架构内对象的 CONTROL 权限。

ms189462.Caution(zh-cn,SQL.90).gif注意:
SQL Server 2005 中架构的行为不同于先前版本的 SQL Server。假设架构与数据库用户等价的代码不能返回正确的结果。在曾经使用过以下任何 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 权限。

ms189462.note(zh-cn,SQL.90).gif注意:
对于向后兼容的语法,将不针对 CREATE SCHEMA 检查任何权限,因为不创建任何架构。

示例

以下示例将创建由 Annik 拥有的、包含表 NineProngsSprockets 架构。此语句向 Mandar 授予 SELECT 权限,而对 Prasanna 拒绝授予 SELECT 权限。请注意,SprocketsNineProngs 在一个语句中创建。

USE AdventureWorks;
CREATE SCHEMA Sprockets AUTHORIZATION Annik
    CREATE TABLE NineProngs (source int, cost int, partnumber int)
    GRANT SELECT TO Mandar
    DENY SELECT TO Prasanna;
GO 

请参阅

参考

ALTER SCHEMA (Transact-SQL)
DROP SCHEMA (Transact-SQL)
GRANT (Transact-SQL)
DENY (Transact-SQL)
REVOKE (Transact-SQL)
CREATE VIEW (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.schemas (Transact-SQL)

其他资源

用户架构分离

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

更改的内容:
  • 更正了语法。