语法
CREATE TABLE
    [ database_name.[ owner ] .| owner.] table_name
    ( { < column_definition >
        | column_name AS computed_column_expression
        | < table_constraint > ::= [ CONSTRAINT constraint_name ] }            | [ { PRIMARY KEY | UNIQUE } [ ,...n ]
    ) [ ON { filegroup | DEFAULT } ] 
[ TEXTIMAGE_ON { filegroup | DEFAULT } ] < column_definition > ::= { column_name data_type }
    [ COLLATE < collation_name > ]
    [ [ DEFAULT constant_expression ]
        | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
    ] 
    [ ROWGUIDCOL]
    [ < column_constraint > ] [ ...n ] < column_constraint > ::= [ CONSTRAINT constraint_name ]
    { [ NULL | NOT NULL ]
        | [ { PRIMARY KEY | UNIQUE }
            [ CLUSTERED | NONCLUSTERED ]
            [ WITH FILLFACTOR = fillfactor ]
            [ON {filegroup | DEFAULT} ] ]
        ] 
        | [ [ FOREIGN KEY ]
            REFERENCES ref_table [ ( ref_column ) ]
            [ ON DELETE { CASCADE | NO ACTION } ]
            [ ON UPDATE { CASCADE | NO ACTION } ]
            [ NOT FOR REPLICATION ]
        ] 
        | CHECK [ NOT FOR REPLICATION ]
        ( logical_expression ) 
    } < table_constraint > ::= [ CONSTRAINT constraint_name ]
    { [ { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        { ( column [ ASC | DESC ] [ ,...n ] ) }
        [ WITH FILLFACTOR = fillfactor ]
        [ ON { filegroup | DEFAULT } ]
    ] 
    | FOREIGN KEY
        [ ( column [ ,...n ] ) ]
        REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
        [ ON DELETE { CASCADE | NO ACTION } ]
        [ ON UPDATE { CASCADE | NO ACTION } ]
        [ NOT FOR REPLICATION ]
    | CHECK [ NOT FOR REPLICATION ]
        ( search_conditions ) 
    } 参数
database_name是要在其中创建表的数据库名称。database_name 必须是现有数据库的名称。如果不指定数据库,database_name 默认为当前数据库。当前连接的登录必须在 database_name 所指定的数据库中有关联的现有用户 ID,而该用户 ID 必须具有创建表的权限。owner是新表所有者的用户 ID 名,owner 必须是 database_name 所指定的数据库中的现有用户 ID,owner 默认为与 database_name 所指定的数据库中的当前连接相关联的用户 ID。如果 CREATE TABLE 语句由 sysadmin 固定服务器角色成员或 database_name 所指定的数据库中的 db_dbowner 或 db_ddladmin 固定数据库角色成员执行,则 owner 可以指定与当前连接的登录相关联的用户 ID 以外的其它用户 ID。如果与执行 CREATE TABLE 语句的登录相关联的用户 ID 仅具有创建表的权限,则 owner 必须指定与当前登录相关联的用户 ID。sysadmin 固定服务器角色成员或别名为 dbo 用户的登录与用户 ID dbo 相关联;因此,由这些用户创建的表的默认所有者为 dbo。不是由上述两种角色的登录创建的表所有者默认为与该登录相关联的用户 ID。table_name是新表的名称。表名必须符合标识符规则。数据库中的 owner.table_name 组合必须唯一。table_name 最多可包含 128 个字符,但本地临时表的表名(名称前有一个编号符 #)最多只能包含 116 个字符。column_name是表中的列名。列名必须符合标识符规则,并且在表内唯一。以 timestamp 数据类型创建的列可以省略 column_name。如果不指定 column_name,timestamp 列的名称默认为 timestamp。computed_column_expression是定义计算列值的表达式。计算列是物理上并不存储在表中的虚拟列。计算列由同一表中的其它列通过表达式计算得到。例如,计算列可以这样定义:cost AS price * qty。表达式可以是非计算列的列名、常量、函数、变量,也可以是用一个或多个运算符连接的上述元素的任意组合。表达式不能为子查询。计算列可用于选择列表、WHERE 子句、ORDER BY 子句或任何其它可使用常规表达式的位置,但下列情况除外: 计算列不能用作 DEFAULT 或 FOREIGN KEY 约束定义,也不能与 NOT NULL 约束定义一起使用。但是,如果计算列由具有确定性的表达式定义,并且索引列中允许计算结果的数据类型,则可将该列用作索引中的键列,或用作 PRIMARY KEY 或 UNIQUE 约束的一部分。 
例如,如果表中含有整型列 a 和 b,则可以在计算列 a+b 上创建索引。但不能在计算列 a+DATEPART(dd, GETDATE()) 上创建索引,因为在以后的调用中,其值可能发生改变。计算列不能作为 INSERT 或 UPDATE 语句的目标。

解决方案 »

  1.   

    CREATE PROCEDURE Test2
    AS
    CREATE TABLE #t(x INT PRIMARY KEY)
    INSERT INTO #t VALUES (2)
    SELECT Test2Col = x FROM #t
    GO
    CREATE PROCEDURE Test1
    AS
    CREATE TABLE #t(x INT PRIMARY KEY)
    INSERT INTO #t VALUES (1)
    SELECT Test1Col = x FROM #t
    EXEC Test2
    GO
    CREATE TABLE #t(x INT PRIMARY KEY)
    INSERT INTO #t VALUES (99)
    GO
    EXEC Test1
    GO下面是结果集:(1 row(s) affected)Test1Col    
    ----------- 
    1           (1 row(s) affected)Test2Col    
    ----------- 
    2           
      

  2.   

    CREATE TABLE jobs
    (
       job_id  smallint
          IDENTITY(1,1)
          PRIMARY KEY CLUSTERED,
       job_desc        varchar(50)     NOT NULL
          DEFAULT 'New Position - title not formalized yet',
       min_lvl tinyint NOT NULL
          CHECK (min_lvl >= 10),
       max_lvl tinyint NOT NULL
          CHECK (max_lvl <= 250)
    )/* ************************* employee table ************************* */
    CREATE TABLE employee 
    (
       emp_id  empid
          CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED
          CONSTRAINT CK_emp_id CHECK (emp_id LIKE 
             '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' or
             emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),
          /* Each employee ID consists of three characters that 
          represent the employee's initials, followed by a five 
          digit number ranging from 10000 through 99999 and then the 
          employee's gender (M or F). A (hyphen) - is acceptable 
          for the middle initial. */
       fname   varchar(20)     NOT NULL,
       minit   char(1) NULL,
       lname   varchar(30)     NOT NULL,
       job_id  smallint        NOT NULL
          DEFAULT 1
          /* Entry job_id for new hires. */
          REFERENCES jobs(job_id),
       job_lvl tinyint
          DEFAULT 10,
          /* Entry job_lvl for new hires. */
       pub_id  char(4) NOT NULL
          DEFAULT ('9952')
          REFERENCES publishers(pub_id),
          /* By default, the Parent Company Publisher is the company
          to whom each employee reports. */
       hire_date       datetime        NOT NULL
          DEFAULT (getdate())
          /* By default, the current system date is entered. */
    )/* ***************** publishers table ******************** */
    CREATE TABLE publishers
    (
       pub_id  char(4) NOT NULL 
             CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED
             CHECK (pub_id IN ('1389', '0736', '0877', '1622', '1756')
                OR pub_id LIKE '99[0-9][0-9]'),
       pub_name      varchar(40)     NULL,
       city         varchar(20)     NULL,
       state      char(2) NULL,
       country      varchar(30)     NULL
                DEFAULT('USA')
    )