0
我有一个要求生成一个随机数(代替身份),所以我尝试了这些方法,但插入数据后,我遇到了一段时间的主键违规。数字(16,10)数据类型的随机数
尝试#1(旧的查询):
SELECT CONVERT(NUMERIC (14,2), GETDATE()) * rand()
FROM sometable
尝试#2(修改的查询):
SELECT CONVERT(NUMERIC(14,2), GETDATE()) * RAND(CAST(NEWID() AS VARBINARY))
FROM sometable
注:
第一个查询总是得到当我们有多个记录插入时重复。
第二个查询在插入批量记录前重复:ex:每个事务5000条记录。
样本表结构:
CREATE table #test
(
id numeric(16,10) primary key
)
查询:
INSERT into #test (ID)
SELECT CONVERT(NUMERIC(14, 2), GETDATE()) * RAND(CAST(NEWID() AS VARBINARY))
FROM sys.objects
SELECT * FROM #test
要求:
我需要插入任何大量的行没有任何主键冲突。
请注意 - 我也欢迎任何其他备用想法。
在此先感谢..
请纠正我,如果我的问题不够清楚。
你将永远无法保证任何随机生成的号码已经不存在在表格中。你将不得不提前检查,或处理PK违规。 – 2014-12-02 18:09:02
嗨比尔..是否有任何替代方案你能建议.. – user3094037 2014-12-02 18:13:26
为什么要求排除使用'IDENTITY'?这是为了这个任务。 – 2014-12-02 18:30:01