我有一个包含8,000行数据的表,并且会添加更多数据。但我忘记在开头放一把主键。这样每行都有一个唯一的密钥。后来我添加了一个主键列。但是那个列现在是NULL。
我希望第一行从ID 1开始,一直递增到ID 8000的最后一行。如何使用单个查询更新所有行?
我正在使用SQL Server 2005。
答案 0 :(得分:2)
打开表设计,添加新列您想要选择列并在属性在标识规范中(是标识) 是.. 您可以通过设置标识种子属性从您想要的位置开始,默认情况下,它从 1 开始。
如果您已经标识栏,您也可以更新它。
步骤1:从表格设计中的列中删除身份规范
步骤2:使用光标更新表格列从1开始
步骤3:再次在表设计中应用列上的身份规范
第4步:通过查询重置标识列,从您想要的值。
例如 DBCC CHECKIDENT("TableName",Reseed,8000);
所以下一个身份值将是8001。
答案 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的 端