如何使用 ALTER TABLE 将约束添加为索引

问题描述 投票:0回答:0

我想用

ALTER TABLE
命令来
ADD CONSTRAINT
。我经常这样做没有问题,但在这种情况下,我也需要将其添加为
INDEX

来自 Microsoft website 它显示以下...

-- ALTER TABLE options

< table_constraint > ::=
 [ CONSTRAINT constraint_name ]
{
   {PRIMARY KEY | UNIQUE }
     {
       NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])
       | NONCLUSTERED HASH (column [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )
     }
    | FOREIGN KEY
        ( column [ ,...n ] )
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
    | CHECK ( logical_expression )
}

<column_index> ::=
  INDEX index_name
{ [ NONCLUSTERED ] | [ NONCLUSTERED ] HASH WITH (BUCKET_COUNT = bucket_count)}

<table_index> ::=
  INDEX index_name
{[ NONCLUSTERED ] HASH (column [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count)
  | [ NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] )
      [ ON filegroup_name | default ]
  | CLUSTERED COLUMNSTORE [WITH ( COMPRESSION_DELAY = {0 | delay [Minutes]})]
      [ ON filegroup_name | default ]
}

我通常会像下面这样添加主键,效果很好:

ALTER TABLE [table_one]
ADD CONSTRAINT [PK_7_table_one] 
PRIMARY KEY CLUSTERED ([id] ASC) 
WITH(
    PAD_INDEX = OFF,
    STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF,
    ALLOW_ROW_LOCKS = ON,
    ALLOW_PAGE_LOCKS = ON
) 
ON[PRIMARY];

SQL Server Management Studio 使用以下脚本编写表:

CREATE UNIQUE NONCLUSTERED INDEX [IX_table_one]
ON [dbo].[table_one] ( [guid] ASC )
WITH (
    PAD_INDEX = OFF
    STATISTICS_NORECOMPUTE = OFF
    SORT_IN_TEMPDB = OFF
    IGNORE_DUP_KEY = OFF
    DROP_EXISTING = OFF
    ONLINE = OFF
    ALLOW_ROW_LOCKS = ON
    ALLOW_PAGE_LOCKS = ON
    OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF
) ON [PRIMARY]

所以现在我正在做以下事情:

ALTER TABLE [table_one]
ADD CONSTRAINT [IX_7_table_one_guid] 
UNIQUE NONCLUSTERED ([id] ASC) 
WITH(
    PAD_INDEX = OFF,
    STATISTICS_NORECOMPUTE = OFF,
    IGNORE_DUP_KEY = OFF,
    ALLOW_ROW_LOCKS = ON,
    ALLOW_PAGE_LOCKS = ON
) 
ON[PRIMARY];

但是,我觉得我错过了什么。就像我需要

UNIQUE NONCLUSTERED INDEX ([id] ASC)
(我知道这是行不通的)。我如何让它像这样显示“索引”?

sql sql-server constraints alter-table
© www.soinside.com 2019 - 2024. All rights reserved.