重设标识列(identity)种子
2006-11-22 14:11
253 查看
重设标识列(identity)种子
讲到 identity 字段,似乎有两个非常不同的阵营。有些开发人员,比如受人尊敬的 Joe Celko,相信 identity 列伪造真相,引入了无意义的数据到一个(依其陈述)否则就很紧凑的数据库中。本文特别赞成第二个阵营(我本人属于该阵营)。这个阵营认为,一个对象与同一个域中的另外一个对象几乎一样(例如一个篮子中的鸡蛋)。我们相信这些对象应该被赋予一个无意义的主键(PK)。
假设你依赖于 identity 列,该列有一个指定的种子和步进值,那么偶尔你会需要重设 identity 值。这种情况经常会发生,因为你会从表中删除很多行数据,而且并不想种子值反映出几百万条的测试记录,而是从1(或者10、100等任何一个数字)开始。但是在测试之后如何重设种子值呢?
解决方法是以 CHECKIDENT 关键字运行 DBCC,指定适当的参数。如何,如果你在测试过程中创建了非常多的数据记录,通过了回归测试,删除了所有的记录,并想把种子重设为1,那么你只要简单地发出类似如下原命令即可:
USE MyDatabase
GO
DBCC CHECKIDENT (MyTable, RESEED, 1)
GO
这几行 SQL 代码将把指定表的种子值强制重设为1。然而,你可能不想将种子重设为1,在这种情况下,你可以用你想用的种子值替代第三个参数。
有时候你可能想知道当前的种子,而不是想重设种子。在这种情况下,使用如下的 SQL:
USE MyDataBase
GO
DBCC CHECKIDENT (MyTable, NORESEED)
GO
总而言之,你可以将任意表的种子值重设为你想要的任何值——除了正在使用的值。你可以随时测试数据库然后删除所有的测试记录并将种子值重设为你需要的值。
讲到 identity 字段,似乎有两个非常不同的阵营。有些开发人员,比如受人尊敬的 Joe Celko,相信 identity 列伪造真相,引入了无意义的数据到一个(依其陈述)否则就很紧凑的数据库中。本文特别赞成第二个阵营(我本人属于该阵营)。这个阵营认为,一个对象与同一个域中的另外一个对象几乎一样(例如一个篮子中的鸡蛋)。我们相信这些对象应该被赋予一个无意义的主键(PK)。
假设你依赖于 identity 列,该列有一个指定的种子和步进值,那么偶尔你会需要重设 identity 值。这种情况经常会发生,因为你会从表中删除很多行数据,而且并不想种子值反映出几百万条的测试记录,而是从1(或者10、100等任何一个数字)开始。但是在测试之后如何重设种子值呢?
解决方法是以 CHECKIDENT 关键字运行 DBCC,指定适当的参数。如何,如果你在测试过程中创建了非常多的数据记录,通过了回归测试,删除了所有的记录,并想把种子重设为1,那么你只要简单地发出类似如下原命令即可:
USE MyDatabase
GO
DBCC CHECKIDENT (MyTable, RESEED, 1)
GO
这几行 SQL 代码将把指定表的种子值强制重设为1。然而,你可能不想将种子重设为1,在这种情况下,你可以用你想用的种子值替代第三个参数。
有时候你可能想知道当前的种子,而不是想重设种子。在这种情况下,使用如下的 SQL:
USE MyDataBase
GO
DBCC CHECKIDENT (MyTable, NORESEED)
GO
总而言之,你可以将任意表的种子值重设为你想要的任何值——除了正在使用的值。你可以随时测试数据库然后删除所有的测试记录并将种子值重设为你需要的值。
相关文章推荐
- 重设标识列(identity)种子
- SQL SERVER 自增长标识列(Auto Increment Identity)的标识种子复位
- sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别
- 当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值
- 木其工作室代写程序 [原]当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'TB_TABLENAME' 中的标识列插入显式值。
- 当IDENTITY_INSERT 设置为 OFF 时,不能为表 'JobSeekerBaseInfoExtension' 中的标识列插入显式值
- Identity自增序列/唯一断标识
- 当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'users' 中的标识列插入显式值
- EF:插入记录失败,提示当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
- C# dapper 返回Sql server 自增长ID 标识列SCOPE_IDENTITY
- sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别
- @@IDENTITY可以返回当前会话中的所有表中生成的最后一个标识值
- 当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值
- 在SQL Server数据库中为标识(IDENTITY)列插入显式值
- 用sql脚本一条条导数据的两种方法,需返回唯一标识@@IDENTITY作为插入到第二个表用。
- 种子张的SQL教程(转)作者:blogcat 日期:2007-11-21 20:42:01 注:红色标识为常用语句(唉,写了一天了,那个累呀!) 转自种子张的博客
- {"当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值"}-异常处理方案
- 当IDENTITY_INSERT设置为OFF时,不能向表'User'中的标识列id插入显式值
- 当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'student' 中的标识列插入显式值。
- 重置MSSQL的Identity标识列的值