3

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

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

我正在使用 SQL Server 2005。

4

5 回答 5

2

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

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

在此处输入图像描述

于 2013-10-09T04:24:08.203 回答
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)
于 2013-10-09T04:32:18.380 回答
1

摆脱您刚刚添加的列。然后运行这个

ALTER TABLE table
ADD ID INT IDENTITY

ALTER TABLE table
ADD CONSTRAINT PK_table
PRIMARY KEY(ID)
于 2013-10-09T04:33:01.277 回答
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
于 2013-10-09T04:27:19.430 回答
0

您可以根据唯一键更新表。声明 @i int=1 While(@i <=(select count(*) from table)) 开始

更新表 Set primary_key_column=@i where

设置@i=@i+1 结束

于 2013-10-09T04:31:26.143 回答