Sql server SQL server-在现有表中添加标识列在内部如何工作?
我有一个包含100行的表,但我的主键列不具有identity属性。(但此列的值看起来像identity列和sequential:1-100) 现在,我尝试用下面的代码添加新的标识列Sql server SQL server-在现有表中添加标识列在内部如何工作?,sql-server,database-design,architecture,identity-column,Sql Server,Database Design,Architecture,Identity Column,我有一个包含100行的表,但我的主键列不具有identity属性。(但此列的值看起来像identity列和sequential:1-100) 现在,我尝试用下面的代码添加新的标识列 alter table tableA add new_Iden_col bigint identity(1,1) 但是我发现新的列标识值并没有按照主键列的顺序排序 那么,有人能解释一下,为什么新添加的列与主键列不同,尽管旧列值是以相同的方式自然填充的,而不是为输出动态排序的 提前感谢。:) 可以使用IDENTIT
alter table tableA add new_Iden_col bigint identity(1,1)
但是我发现新的列标识值并没有按照主键列的顺序排序
那么,有人能解释一下,为什么新添加的列与主键列不同,尽管旧列值是以相同的方式自然填充的,而不是为输出动态排序的
提前感谢。:) 可以使用
IDENTITY
功能创建一个新的IDENTITY
列,并按照SELECT…INTO的ORDER by
子句指定的顺序分配增量值。下面是一个示例,创建一个新的IDENTITY
列,用作旧主键列顺序中的新主键
SELECT
IDENTITY(bigint, 1,1) AS new_Ident_col
, OtherData
INTO FROM dbo.TableA_New
FROM dbo.TableA
ORDER BY old_PK_col;
DROP TABLE dbo.TableA;
EXEC sp_rename 'dbo.TableA_New', 'TableA';
ALTER TABLE dbo.TableA ADD CONSTRAINT PK_TableA PRIMARY KEY(new_Ident_col);
首先,谁在乎呢?您不应该关心什么行得到什么值。其次,我怀疑它可能与聚集索引的“顺序”一致。没有identity列的表的ddl是什么?在这种情况下,哪一行获得哪一个值很重要,因为我试图使现有的主键列(没有identity)具有identity属性。因此,当我尝试添加新的标识列时,其填充值的顺序与主键值的顺序不同。感谢Dan,除了解决此问题外,我还想知道SQL引擎根据什么基础将数字分配给我的表,如输出中所述。我想理解这种逻辑。@Hemanth,我希望SQL Server按照聚集索引的顺序分配值,或者在堆的情况下,按照分配顺序分配值。不过,我建议您避免依赖于上的未记录行为,因为它可能会根据SQL版本和修补程序级别而变化。谢谢Dan,这很有帮助。是的,我会那样做的。