2016-02-02 25 views
0

我有一个100行的表,但我的主键列没有标识属性(但这个列的值看起来像标识列和顺序:1-100) 现在我试着添加新的标识列与下面的代码SQL服务器 - 如何在现有表中添加标识列在内部工作?

alter table tableA add new_Iden_col bigint identity(1,1) 

但我发现新的列标识值没有按照我的主键列的排序顺序。

my output of old Primary key col and new inserted identity column

所以有人可以解释我为什么新添加的列不一样的,即使我的旧列值以同样的方式自然填充,而不是动态排序输出我的主键列。

在此先感谢。 :)

+1

首先谁在乎?你不应该关心哪一行获得什么价值。第二,我怀疑它可能是在你的聚集索引的“顺序”。什么是您的表没有身份列的ddl? –

+0

重要的是哪些行得到这种情况的值,因为我试图使现有的主键列(没有身份)具有身份属性。所以当我试图添加新的标识列它的填充值不是以我的主键值相同的顺序。 – Hemanth

回答

0

IDENTITY的功能可以被用来创建一个新的IDENTITY柱上并通过的SELECT...INTOORDER 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); 
+0

**感谢Dan,**不仅仅是让这种情况得到解决,我想知道SQL引擎在我的表中如何分配数字,正如我的输出中所解释和显示的那样。我想故意理解这个逻辑。 – Hemanth

+1

@Hemanth,我希望SQL Server按照聚簇索引或堆分配顺序的顺序分配值。不过,我建议避免依赖未公开的行为,因为它可能会根据SQL版本和修补程序级别进行更改。 –

+0

**谢谢丹**,它有帮助。 是的,这样做。 – Hemanth

相关问题