日期:2014-05-17  浏览次数:20526 次

uniqueidentifier字段 唯一值的问题

执行以下语句N亿次,两个表中fa与fb中的值永远不会相同吗?

insert into ta (fa) select newID()
insert into tb (fb) select newID()

谢谢
------最佳解决方案--------------------
总感觉guid、uuid之类的算法,还是有很低的概率会重复的
------其他解决方案--------------------
N亿亿亿次,亦不相同.
------其他解决方案--------------------
不会想同的  
------其他解决方案--------------------
使用:NEWSEQUENTIALID ( )这个函数创建的随机数较为稳定。
------其他解决方案--------------------
declare @t table(fa uniqueidentifier default NEWSEQUENTIALID() ,fid int) 
declare @s uniqueidentifier; --varchar(100);

insert @t (fid) values (1);
select @s=fa from @t
print @s

set @s=newid()
print @s

------其他解决方案--------------------
declare @s uniqueidentifier;
set @s=NEWID() 
select @s
--or
select newid()
------其他解决方案--------------------
引用:
总感觉guid、uuid之类的算法,还是有很低的概率会重复的


32 个字符,各字符取不同值36种, 32^36 = 1.5E54, 在一亿次中重复的概率,应该可以算得出来.
------其他解决方案--------------------
设置列的默认值是newid().
------其他解决方案--------------------
先插,再取
------其他解决方案--------------------
引用:
SQL code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939……

还是newid看着帅
------其他解决方案--------------------
谢谢!

除以下写法,另外还有其他的方法返回newID()生产的值吗?
declare @NV uniqueidentifier
select @NV=newID()
insert into ta select @NV

------其他解决方案--------------------
是否可以得到NEWSEQUENTIALID()产生的值呢,我需要在另外的表中应用到该值的
------其他解决方案--------------------
引用:
是否可以得到NEWSEQUENTIALID()产生的值呢,我需要在另外的表中应用到该值的


declare @s varchar(100);
set @s=NEWSEQUENTIALID()
------其他解决方案--------------------
楼上的你,你那样写执行出错的
------其他解决方案--------------------
引用:
楼上的你,你那样写执行出错的


哦,还真是,与newid()不一样!

declare @t table(fa uniqueidentifier default NEWSEQUENTIALID() ,fid int) 
declare @s uniqueidentifier; --varchar(100);

insert @t (fid) values (1);
select @s=fa from @t

set @s=newid()
print @s

print @s
------其他解决方案--------------------

NEWSEQUENTIALID的结果,同一台机做了100次,后面4段都没变:
 NEWSEQUENTIALID                     - newid