如何向SQLSERVER中进行update一组随机数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何向SQLSERVER中进行update一组随机数相关的知识,希望对你有一定的参考价值。
如何向SQLSERVER中表中的一列update成随机数
参考技术A 这个还真不好做,因为sqlserver在0.5秒内,用 同一种子,随机函数会取到同一个数,可能的话在表中新加一列,然后,列识成标志列,全填上数字。
然后用 update 表名 set 要改的列名 = round (( 刚生成的列转成字符,+ 秒数转字符, 加时间转字符 )转换成数字)
这样一个近拟的效果, 参考技术B 你可以使用guid类型。它会自动生成一组随机数。而且不会重复。因为重复的机率非常非常小。几乎不可能! 参考技术C --创建视图
create
view
myview
as
select
re=rand()
--自定义函数:取得指定范围的随机数
create
function
mydata(
@a
int,
@b
int)
returns
decimal(38,0)
as
begin
declare
@r
decimal(38,0)
select
@r=cast(re*(@b-@a)+@a
as
decimal(38,0))
from
myview
return(@r)
end
go
--调用(可以随意指定你要的数据范围)
select
user_no,dbo.mydata(1000,9999)
number
from
table1
--可以在你原来的查询基础上增加一列number,如不增加列,
--那就把上面的结果放入一个临时表
#a,然后update
--如:
update
table1
set
number1=a.number
from
#a
a,table1
b
where
a.user_no=b.user_no 参考技术D 随机数在客户端生成,再UPDATE不行么?
SQLServer并发问题,先SELECT后UPDATE,避免并发脏读情况解决
在SQL Server中,需要对数据操作进行先SELECT 之后UPDATE,对于这样的操作,如果出现高并发,可能导致脏读情况的发生。不能保证数据的同步。
解决方案是在事物中对表进行加更新锁:
事务一:
begin tran declare @count int =0 select @count=[Count] from tb_name WITH(UPDLOCK,HOLDLOCK) where id=1 select @count as count1 waitfor delay ‘00:00:30‘ update tb_name set [Count]=@count+1 where id=1 commit tran select * from tb_name
事务二:
begin tran declare @count int =0 select @count=[Count] from tb_name WITH(UPDLOCK,HOLDLOCK) where id=1 select @count as count2 update tb_name set [Count]=@count+1 where id=1 commit tran select * from tb_name
以上是关于如何向SQLSERVER中进行update一组随机数的主要内容,如果未能解决你的问题,请参考以下文章