T-SQL在一个查询中创建表和索引

Ste*_*hev 4 sql sql-server sql-server-2012

是否有可能只用一个这样的SQL语句创建索引(没有外键而不是唯一)和表(不是表变量).

CREATE TABLE tabind
(
    id          int             identity(1,1) primary key   ,
    birthday    datetime        default getdate()           ,
    some_id     int             INDEX index_name, /*this line causes a sql server error*/
    name        nvarchar(100)
);
Run Code Online (Sandbox Code Playgroud)

实际上相当于这句话:

CREATE TABLE tabind
(
    id          int             identity(1,1) primary key   ,
    birthday    datetime        default getdate()           ,
    some_id int             ,
    name        nvarchar(100)
);

create index idx_tabind on tabind(some_id);
Run Code Online (Sandbox Code Playgroud)

我的SQL Server版本是2012.

谢谢.

Mar*_*ith 5

不,在线索引声明仅限2014年.

这实际上创建了相同的索引.

CREATE TABLE tabind
  (
     id       INT IDENTITY(1, 1) PRIMARY KEY,
     birthday DATETIME DEFAULT GETDATE(),
     some_id  INT,
     NAME     NVARCHAR(100),
     CONSTRAINT index_name UNIQUE (NAME, id)
  ); 
Run Code Online (Sandbox Code Playgroud)

SQL Server 通过添加聚簇索引键(在您的情况下由PK隐式创建)静默地使非唯一非聚簇索引唯一