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