将自动递增主键添加到SQL SERVER 2005中的现有表

时间:2013-10-09 04:16:33

标签: sql-server vb.net

我有一个包含8,000行数据的表,并且会添加更多数据。但我忘记在开头放一把主键。这样每行都有一个唯一的密钥。后来我添加了一个主键列。但是那个列现在是NULL。

我希望第一行从ID 1开始,一直递增到ID 8000的最后一行。如何使用单个查询更新所有行?

我正在使用SQL Server 2005。

5 个答案:

答案 0 :(得分:2)

打开表设计,添加新列您想要选择列并在属性标识规范(是标识) 是.. 您可以通过设置标识种子属性从您想要的位置开始,默认情况下,它从 1 开始。

如果您已经标识栏,您也可以更新它。
步骤1:从表格设计中的列中删除身份规范 步骤2:使用光标更新表格列从1开始 步骤3:再次在表设计中应用列上的身份规范
第4步:通过查询重置标识列,从您想要的值。 例如
DBCC CHECKIDENT("TableName",Reseed,8000);
所以下一个身份值将是8001。

enter image description here

答案 1 :(得分:1)

根据您的要求,您只需要一个SQL查询,它将以增量方式使用新的主键值更新整个表。这是:

UPDATE myTable
SET ID = ID + 1

其中ID是PK字段名称

一旦更新,请不要忘记添加标识列,如下所示:

ALTER TABLE table
ADD ID INT IDENTITY

ALTER TABLE table
ADD CONSTRAINT PK_table
PRIMARY KEY(ID)

答案 2 :(得分:1)

删除刚刚添加的列。然后运行此

ALTER TABLE table
ADD ID INT IDENTITY

ALTER TABLE table
ADD CONSTRAINT PK_table
PRIMARY KEY(ID)

答案 3 :(得分:0)

CREATE TABLE [dbo].[TheTable](
    [TheID] [int] IDENTITY(1,1) NOT NULL,
    [TheColumn] [nvarchar](100) NOT NULL,
 CONSTRAINT [PK_TheTable] PRIMARY KEY CLUSTERED 
(
    [TheID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


INSERT INTO [dbo].[TheTable]
        ( [TheColumn] )
SELECT 'one'
UNION 
SELECT 'two'

SELECT * FROM [dbo].[TheTable] TT

答案 4 :(得分:0)

您可以根据唯一键更新表格。 声明@i int = 1 while(@ i< =(从表中选择count(*))) 开始

更新表格 设置primary_key_column = @ i 哪里

设置@ I = @ i + 1的 端