fea*_*net 231 sql-server alter-table primary-key sql-server-2008
作为标题,我有一个已经填充150000条记录的现有表.我添加了一个Id列(当前为null).
我假设我可以运行查询以使用增量数填充此列,然后设置为主键并启用自动增量.这是正确的方法吗?如果是这样,我如何填写初始数字?
mar*_*c_s 397
不 - 你必须以相反的方式做到这一点:从一开始就添加它INT IDENTITY- 当你这样做时它将被填充身份值:
ALTER TABLE dbo.YourTable
ADD ID INT IDENTITY
Run Code Online (Sandbox Code Playgroud)
然后你可以把它作为主键:
ALTER TABLE dbo.YourTable
ADD CONSTRAINT PK_YourTable
PRIMARY KEY(ID)
Run Code Online (Sandbox Code Playgroud)
或者如果你喜欢一步到位:
ALTER TABLE dbo.YourTable
ADD ID INT IDENTITY
CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED
Run Code Online (Sandbox Code Playgroud)
gbn*_*gbn 19
你不能"打开"IDENTITY:它是一个表重建.
如果您不关心数字顺序,则可以一次性添加带有IDENTITY的列NOT NULL.150k行不是很多.
如果您需要保留一些数字顺序,请相应地添加数字.然后使用SSMS表设计器设置IDENTITY属性.这允许您生成一个脚本,该脚本将为您执行列删除/添加/保留数字/重新设置.
Kev*_*vin 11
我有这个问题,但无法使用标识列(出于各种原因).我解决了这个问题:
DECLARE @id INT
SET @id = 0
UPDATE table SET @id = id = @id + 1
Run Code Online (Sandbox Code Playgroud)
借来自这里.
小智 7
ALTER TABLE table_name ADD temp_col INT IDENTITY(1,1)
update
Run Code Online (Sandbox Code Playgroud)
此答案是对最高投票答案的一个小补充,适用于 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
Run Code Online (Sandbox Code Playgroud)
如果该列已存在于您的表中并且为空,您可以使用以下命令更新该列(替换 id、tablename 和 tablekey):
UPDATE x
SET x.<Id> = x.New_Id
FROM (
SELECT <Id>, ROW_NUMBER() OVER (ORDER BY <tablekey>) AS New_Id
FROM <tablename>
) x
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
485171 次 |
| 最近记录: |