如何向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一组随机数的主要内容,如果未能解决你的问题,请参考以下文章

如何将随机值插入 SQL Server 表?

编程:如何生成一组随机数字?

SQLServer之Case用法

通过JS如何随机选择一组数据中的一个

C#中自定义一组随机数据,怎么把数据在文本框中显示?而且数据是按顺序动态的显示到界面上,求大神们指点

Scikit learn - 如何使用 SVM 和随机森林进行文本分类?