作为标题,我有一个已经填充了150000条记录的现有表。我添加了一个Id列(目前为空)。
我假设我可以运行一个查询,用增量数字填充这个列,然后设置为主键并打开自动增量。这是正确的做法吗?如果是,我怎么填入初始数字?
作为标题,我有一个已经填充了150000条记录的现有表。我添加了一个Id列(目前为空)。
我假设我可以运行一个查询,用增量数字填充这个列,然后设置为主键并打开自动增量。这是正确的做法吗?如果是,我怎么填入初始数字?
当前回答
试试下面的代码:
DBCC CHECKIDENT ('settings', RESEED, 0)
其他回答
我遇到了这个问题,但不能使用标识列(由于各种原因)。 我决定这样做:
DECLARE @id INT
SET @id = 0
UPDATE table SET @id = id = @id + 1
从这里借的。
试着这样做(先在测试台上):
USE your_database_name GO WHILE (SELECT COUNT(*) FROM your_table WHERE your_id_field IS NULL) > 0 BEGIN SET ROWCOUNT 1 UPDATE your_table SET your_id_field = MAX(your_id_field)+1 END PRINT 'ALL DONE'
我根本没有测试过这个,所以要小心!
这个答案是对投票最多的答案的一个小补充,适用于SQL Server。问题要求自动增加主键,当前答案确实添加了主键,但它没有被标记为自动增加。下面的脚本检查列是否存在,并在启用自动递增标志的情况下添加它。
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'YourTable' AND COLUMN_NAME = 'PKColumnName')
BEGIN
ALTER TABLE dbo.YourTable
ADD PKColumnName INT IDENTITY(1,1)
CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED
END
GO
您不能“打开”IDENTITY:这是一个表重建。
如果您不关心数字顺序,您可以用IDENTITY一次性添加列NOT NULL。15万行不是很多。
如果您需要保留一些数字顺序,那么相应地添加数字。然后使用SSMS表设计器设置IDENTITY属性。这允许您生成一个脚本,该脚本将为您执行列删除/添加/保留数字/重新播种。
Alter table /**粘贴tabal的名称**/ 添加id int (1,1)
删除/**,粘贴tabal的名称**/ id在哪里
(
选择a.d id FROM /**粘贴tabal的名字/作为a 左外连接( SELECT MIN(id) as id 从/粘贴tabal的名称/ 集团 /粘贴列c1,c2 ....* * /
) as t1
ON a.id = t1.id
在t1。id为空
)
Alter table /**粘贴tabal的名称**/ DROP列id