Must know something of everything and everything of something!
MSSQL怎样使自动增加的id列数据归零
上一篇 /
下一篇 2007-06-19 12:59:00
/ 个人分类:DataBase
MSSQL怎样使自动增加的id列数据归零
6Fp(Yc.sHR"V2X0f!\-x3[/x5y1f(}0讲到 identity 字段,似乎有两个非常不同的阵营。有些开发人员,比如受人尊敬的 Joe Celko,相信 identity 列伪造真相,引入了无意义的数据到一个(依其陈述)否则就很紧凑的数据库中。本文特别赞成第二个阵营(我本人属于该阵营)。这个阵营认为,一个对象与同一个域中的另外一个对象几乎一样(例如一个篮子中的鸡蛋)。我们相信这些对象应该被赋予一个无意义的主键(PK)。 51Testing软件测试网6q;rF+_w
51Testing软件测试网%]D;JqOfg 假设你依赖于 identity 列,该列有一个指定的种子和步进值,那么偶尔你会需要重设 identity 值。这种情况经常会发生,因为你会从表中删除很多行数据,而且并不想种子值反映出几百万条的测试记录,而是从1(或者10、100等任何一个数字)开始。但是在测试之后如何重设种子值呢?
$vK/u]t4I K7MA2Oy0 yNX.@p0 解决方法是以 CHECKIDENT 关键字运行 DBCC,指定适当的参数。如何,如果你在测试过程中创建了非常多的数据记录,通过了回归测试,删除了所有的记录,并想把种子重设为1,那么你只要简单地发出类似如下原命令即可:
q%ndM
y5hVC051Testing软件测试网*^:?o's*q:K~ USE MyDatabase
+Z%K6@`^0RQ^M0(oW6kL
P}0 GO51Testing软件测试网&^0r \:Y
D`8k
/W/}S/`H0 DBCC CHECKIDENT (MyTable, RESEED, 1)51Testing软件测试网2Uf W&P*d]3S
51Testing软件测试网S E3n5MVq'aQ-d1r A GO51Testing软件测试网)_eIcjs
J|X [DA {L/Jt0 这几行 SQL 代码将把指定表的种子值强制重设为1。然而,你可能不想将种子重设为1,在这种情况下,你可以用你想用的种子值替代第三个参数。
o@ k h#v0NT051Testing软件测试网WB-iJ
h7~e.e 有时候你可能想知道当前的种子,而不是想重设种子。在这种情况下,使用如下的 SQL: 51Testing软件测试网3^4~ xr4rhMc
+T Q%\7wX9a0 USE MyDataBase51Testing软件测试网u^c'f_^
}:fI@v/X"Dzy0 GO51Testing软件测试网 P7y C,M+s4~
kbd6\0Y0 DBCC CHECKIDENT (MyTable, NORESEED)51Testing软件测试网~"P;p7O(e3i
G dMN.K
\sg6aNm/H3}!k:Km0 GO51Testing软件测试网\j/~%@,A
tx.oY5S0 总而言之,你可以将任意表的种子值重设为你想要的任何值——除了正在使用的值。你可以随时测试数据库然后删除所有的测试记录并将种子值重设为你需要的值。51Testing软件测试网4q.d
]/zCk"a
相关阅读:
- SQL优化-索引 (jackz, 2007-5-29)
- sql中distinct的用法 (jackz, 2007-5-29)
- 表Information中有四个字段:ID,Name,Sex,Position (jackz, 2007-5-29)
- 在SQL语句中使用索引提示提高SQL性能 (jackz, 2007-6-04)
- function (jackz, 2007-6-05)
- DBCC DBREINDEX重建索引提高SQL Server性能 (jackz, 2007-6-12)
- 使用 INDEX 优化器提示 (jackz, 2007-6-12)
- 获取存储过程返回值 (jackz, 2007-6-18)
收藏
举报
TAG:
DataBase