在SQL Server中重新排列标识列值

| 请帮我!我有一个表将标识字段的值是, 例如1、2、4、6、8、10、11等。 我想按顺序制作,即1,2,3,4,5,6,7 ...,不使用drop 谢谢     
已邀请:
你不能。
identity
列不可更新。 (或者至少不能以任何合理的方式。您可以从表中删除所有行,然后在启用ѭ1的情况下重新插入它们)
identity
列中的空白也是生活中不可或缺的事实,最好加以接受!如果出于显示目的需要连续的数字序列,可以使用
ROW_NUMBER
。     
没有简单的方法可以做到这一点,也没有理由必须这样做。但是,您可以构造一个视图以提供类似的功能:
CREATE VIEW MyTableView AS SELECT ROW_NUMBER() OVER (ORDER BY Identity) AS RowNum, * FROM MyTable
然后让您的客户从MyTableView中选择。 如果您需要视图与表具有相同的名称,以确保向后兼容,您当然可以重命名表,然后使用旧表名创建视图。     
为什么不创建一个新字段,使其从1开始为同种种子,然后删除旧列并重命名新列(然后重新创建所有FK引用)。     
我认为这是最好的解决方案..如果您喜欢,请尝试…
DECLARE @INC AS INTEGER 
SET @INC = 1 
WHILE (@INC <= 7582) --7582 is rowcount of table
BEGIN
    UPDATE YourTable
    SET    ID = @INC
    WHERE  ID = (
               SELECT MIN(ID) AS T
               FROM   YourTable
               WHERE  ID > @INC
           ) --ID=> Identity column
    SET @INC = @INC + 1
END 
注意:执行此操作之前,需要删除标识插入到列中。     
DBCC CHECKIDENT(<\'表名\'>,RESEED,<\'表中的最后一个序列** \'>) **输入时将使数字加1(+1)。即新记录需要下一个为38,因此使用37作为该值。     

要回复问题请先登录注册