mssql08r2标识列数据值变了的原因及修复方法

mssql08r2标识列数据值变了的原因及修复方法,第1张

当数据记录被删除一部分后,后面再添加的新数据记录,标识列数值会有很大的空闲间隔,看上去是不是很不爽呢。即使你删除表中全部记录,identity标识列的值还是会无休止的自动增加变大,而不是从头开始增长。通过下面这条语句可以重置自增长字段的种子值:

DBCC CHECKIDENT(TABLE, [RESEED|NORESEED], [1])

上述语句将把指定表的种子值强制重设为1。然而,如果你不想将种子重设为1,你可以用你想用的种子值替代第三个参数。如果你想知道当前的种子,而不是想重设标识种子,这时你就要用NORESEED,而不用再去设置第三个参数。

今天在项目中遇到一个问题,想在存储过程中将查询出来的数据放到一个临时表中,不想create table(这人懒drop table #tempSELECT id = IDENTITY(int,1,1),* INTO #TEMP FROM myTableselect * from #temp说明:id = IDENTITY(int,1,1),这句建立自增列的。其他的也不用多说了!^_^参考资料:SQL Server中,经常会用到Identity标识列,这种自增长的字段 *** 作起来的确是比较方便。但它有时还会带来一些麻烦。示例一:当表中被删除了某些数据的时候,自增长列的编号就不再是一个连线的数列。这种时候我们可以用以下方案来解决。SET IDENTITY_INSERT [TABLE] [ON|OFF]允许将显式值插入表的标识列中,当设置为ON时,这时可能在INSERT *** 作时手工指定插入到标识列中的编号,同时必须在 *** 作完成后,将IDENTITY_INSERT还原成OFF,否则下次插入的时候必须指定编号,那不然就无法完成INSERT *** 作。示例二:当表中的记录被全部删除,但此时标识列的值越来越大的时候,如果不加以重置,它还会无休止的增长。这个时候我们就要用到:DBCC CHECKIDENT(TABLE, [RESEED|NORESEED], [1])将把指定表的种子值强制重设为1。然而,你可能不想将种子重设为1,在这种情况下,你可以用你想用的种子值替代第三个参数。有时候你可能想知道当前的种子,而不是想重设种子,这时你就要用到NORESEED,而不用再去顾忌第三个参数。

可以,各种数据库一般的有随机函数,你把?部分替换成随机函数就可以了,各种数据库不一样

例如oracle可以写成update

tabel

set

moods=cast(dbms_random.value*200+1

as

integer)

where

ID

between

1

and

1000


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6693543.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存