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