我最近将一些旧数据导入到新的SQL表中,忘了将ID列设置为自动增量。
现在我在名为ID的列中有几个" NULL"
有没有办法可以自动更新具有唯一ID的所有ID列? 可悲的是,我不知道如何
之后我将能够将列设置为INT和自动增量。
感谢您的帮助。
答案 0 :(得分:5)
尝试在Sql Server 2012中使用序列对象
create Sequence Sq as int
minvalue 1
cycle;
update table set Column=NEXT VALUE FOR Sq where Column is null
答案 1 :(得分:4)
最简单的方法是删除旧的ID列并添加新的列ID:
ALTER TABLE [dbo].[myTable] DROP COLUMN ID
ALTER TABLE [dbo].[myTable] ADD ID int IDENTITY
答案 2 :(得分:2)
您可以使用CTE(公用表表达式)来执行此操作:
;WITH cte AS
(
SELECT ROW_NUMBER() OVER (ORDER BY ColA) AS RN,
ID,
ColA
FROM dbo.YourTable
)
UPDATE cte
SET ID = RN
在此示例中,新ID由ColA
排序生成 - 但您可以按所需的任何列进行排序。
答案 3 :(得分:2)
不使用序列和手动设置起始值:
declare @MaxId int
select @MaxId = max(id) from [TableA]
update [TableA]
set @MaxId = id = @MaxId +1
where id is null
从2008年开始适用于所有版本的SQL Server。 Sqlfiddle
答案 4 :(得分:1)
如果当前ID列不重要且分配给ID列的值不相关,您可以尝试以下操作:
示例脚本可能如下所示:
// Create a new identity column
ALTER TABLE dbo.YourTable
ADD NewID INT IDENTITY(1,1);
GO
// Drop the old ID column
ALTER TABLE dbo.YourTable
DROP COLUMN OldID;
GO
// Rename the new column from 'NewID' to 'OldID'
EXEC sp_rename 'YourDataBase.YourTable.NewID', 'OldID', 'COLUMN';
GO
当您的表具有基于旧ID列中的值的关系时,这将不起作用。