我有一个包含 8,000 行数据的表,并且会添加更多数据。但我忘了在开头放一个主键。这样每一行都有一个唯一的键。后来我添加了一个主键列。但该列现在为 NULL。
我希望第一行从 ID 1 开始并一直递增到 ID 8000 的最后一行。如何使用单个查询更新所有行?
我正在使用 SQL Server 2005。
我有一个包含 8,000 行数据的表,并且会添加更多数据。但我忘了在开头放一个主键。这样每一行都有一个唯一的键。后来我添加了一个主键列。但该列现在为 NULL。
我希望第一行从 ID 1 开始并一直递增到 ID 8000 的最后一行。如何使用单个查询更新所有行?
我正在使用 SQL Server 2005。
打开表 设计,添加你想要的新列选择列并在身份规范中的属性中制作(是身份)是..您可以通过设置身份种子属性从您想要的位置开始,默认情况下它从1开始。
如果您已经有身份列,您也可以更新它。
第 1 步:从表设计中的列中删除身份规范。
第 2 步:使用光标从 1 开始更新表列。
第 3 步:再次在表设计中的列上应用标识规范
第 4 步:通过查询重置标识列,从您想要的值。例如
DBCC CHECKIDENT("TableName",Reseed,8000);
,下一个标识值将是 8001。
根据您的要求,您只需要一个 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)
摆脱您刚刚添加的列。然后运行这个
ALTER TABLE table
ADD ID INT IDENTITY
ALTER TABLE table
ADD CONSTRAINT PK_table
PRIMARY KEY(ID)
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
您可以根据唯一键更新表。声明 @i int=1 While(@i <=(select count(*) from table)) 开始
更新表 Set primary_key_column=@i where
设置@i=@i+1 结束