我有SQL Server数据库,我想改变标识列,因为它开始了 有一个大数字10010,它与另一个表相关,现在我有200条记录,我想在记录增加之前修复这个问题。
更改或重置该列的最佳方法是什么?
我有SQL Server数据库,我想改变标识列,因为它开始了 有一个大数字10010,它与另一个表相关,现在我有200条记录,我想在记录增加之前修复这个问题。
更改或重置该列的最佳方法是什么?
当前回答
将您的表复制到没有标识列的新表。
select columns into newtable from yourtable
用new seed添加一个标识列到newtable,并将其作为主键
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY
其他回答
您不能更新标识列。 SQL Server不允许更新标识列,这与使用更新语句更新其他列不同。
尽管有一些替代方案可以实现类似的需求。
当需要为新记录更新标识列值时
使用DBCC CHECKIDENT检查表的当前标识值,如果需要,则更改标识值。
DBCC CHECKIDENT('tableName', RESEED, NEW_RESEED_VALUE)
当需要更新现有记录的标识列值时
使用IDENTITY_INSERT,它允许显式的值插入到表的标识列中。
SET IDENTITY_INSERT YourTable {ON|OFF}
例子:
-- Set Identity insert on so that value can be inserted into this column
SET IDENTITY_INSERT YourTable ON
GO
-- Insert the record which you want to update with new value in the identity column
INSERT INTO YourTable(IdentityCol, otherCol) VALUES(13,'myValue')
GO
-- Delete the old row of which you have inserted a copy (above) (make sure about FK's)
DELETE FROM YourTable WHERE ID=3
GO
--Now set the idenetity_insert OFF to back to the previous track
SET IDENTITY_INSERT YourTable OFF
尝试使用DBCC CHECKIDENT:
DBCC CHECKIDENT ('YourTable', RESEED, 1);
将您的表复制到没有标识列的新表。
select columns into newtable from yourtable
用new seed添加一个标识列到newtable,并将其作为主键
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT KEY
DBCC CHECKIDENT(table_name, RESEED, value)
Table_name =给出要重置的表的值
Value =初始值为0,以1开始单位列
如果你的问题答对了,你想做的是
update table
set identity_column_name = some value
让我告诉你,这不是一个简单的过程,使用它是不可取的,因为它可能有一些相关的外键。
但这里有一些步骤,请采取备份表
步骤1-选择表的设计视图
步骤2-关闭标识列
现在可以使用更新查询了。
现在重做第1步和第2步,并打开标识列
参考