1

请帮我!我有一个表将一个标识字段的值是,例如,1、2、4、6、8、10、11 ....等。

我想按顺序制作,即1,2,3,4,5,6,7...不使用drop

谢谢

4

5 回答 5

3

你不能。identity列不可更新。(或者至少你不能以任何理智的方式。你可以从表中删除所有行,然后重新插入它们IDENTITY_INSERT

此外,列中的空白identity只是生活中的一个事实,最好接受!如果您需要连续的数字序列用于显示目的,您可以使用ROW_NUMBER.

于 2011-04-27T14:14:49.573 回答
1

您为什么不创建一个新字段,使其从 1 开始作为标识种子,然后删除旧列并重命名新列(然后重新创建所有 FK 引用)。

于 2011-04-27T14:32:53.810 回答
1

没有简单的方法可以做到这一点,也没有理由必须这样做。但是,您可以构建一个视图以提供类似的功能:

CREATE VIEW MyTableView AS SELECT ROW_NUMBER() OVER (ORDER BY Identity) AS RowNum, * FROM MyTable

然后让您的客户从 MyTableView 中进行选择。

如果您需要视图与表同名,以确保向后兼容,您当然可以重命名表,然后使用旧表名创建视图。

于 2011-04-27T14:33:29.840 回答
1

我认为这是最好的解决方案.. 如果您喜欢,请尝试...</p>

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 

注意:在执行之前,您需要将标识插入到列中。

于 2014-08-07T08:34:40.170 回答
0

DBCC CHECKIDENT (<'表名'>, RESEED, <'表中的最后一个序列**'>)

** 这将使输入时数字加 1 (+1)。即需要下一个为 38 的新记录,因此使用 37 作为此值。

于 2013-06-19T09:54:31.607 回答