如何在排序表后添加列并用数字填充它?

时间:2017-12-25 14:34:45

标签: sql sql-server

我有这张桌子:

CREATE TABLE [dbo].[Phrase]
(
    [PhraseId] [uniqueidentifier] NOT NULL,
    [PhraseNum] [int] NULL
    [English] [nvarchar](250) NOT NULL,

    PRIMARY KEY CLUSTERED ([PhraseId] ASC)
) ON [PRIMARY]
GO

我想要做的是对表进行排序,并使用一个数字填充列PhraseNum,其中排序表的第一行为1,之后的每一行都有一个更大的值比之前的那个。

2 个答案:

答案 0 :(得分:1)

在SQL Server中,您可以使用标识列执行此操作:

CREATE TABLE [dbo].[Phrase](
    [PhraseId] [uniqueidentifier] NOT NULL PRIMARY KEY,
    [PhraseNum] int identity(1, 1) NOT NULL
    [English] [nvarchar](250) NOT NULL
);

将唯一标识作为(群集)主键是一个非常非常糟糕的主意。为什么?未订购新值。这意味着必须为每个insert重新排序数据 - 导致碎片化。

您应该使用PhraseNum列作为主键。

答案 1 :(得分:1)

Alan,如果PhraseNum中的数据不重要(正如我在帖子中看到的那样),您可以删除该列并添加为标识列

ALTER TABLE Phrase drop column PhraseNum ;
ALTER TABLE Phrase Add PhraseNum int identity(1,1) not null;

PhraseNum的编号将通过群集索引排序标准完成,因此通过PhraseId

但首先在测试数据库上进行测试是安全的