您无法通过简单的查询来做到这一点。计划一些将成为存储过程的东西。
SQL-SERVER 生成器中的伪随机数生成器使用种子 (tiny-int,int, small-int) 并随机生成 0 到 1 之间的浮点数。希望您的记录有某种数字键。您需要:
(1) 设置一个 WHILE 循环来执行此操作。确保您还使用了合理的计数器变量。增加它并在循环的每次迭代中检查它,因为失控循环并不好玩。
(2) 使用 RAND() 生成浮点数。您可以使用日期和时间中的某些内容作为种子。它必须每次都改变,因为用相同的种子再次调用 RAND(seed) 会给你相同的数字。以下来自 SQL-SERVER 2005 在线书籍:
SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) )
(您可以阅读此内容:在 Transact-SQL 参考中查找 RAND()。那里有一个链接可以告诉您所有相关信息。
(2) 将生成的十进制数乘以十的幂得到一个整数。
(3) 将这些数字存储在某个地方,可能是在表对象或临时表中
(4) 根据存储的表检查新号码,确保它不是重复的(不太可能,但你永远不知道)。出于这个原因,以及防止失控循环,使用大于 100 的计数器限制。如果你确实有一个 dup,生成一个新数字,直到你没有得到一个(另一个 while 循环)不要放任何数字在第二个临时表中,直到您确定他们不是骗子。
(5) 当你的临时表中的记录数达到 100 条时,你应该完成了。您可以只在一个变量中跟踪它,但您可能希望最后将该变量与实际数字进行比较。
(6) 如果您想确保这些数字随着时间的推移是唯一的;即永远不会两次获得相同的记录,只需将临时表中的所有数字插入您保留的一个。在开始之前,您可以从该永久表重新填充临时表。您也可以在一段时间后(一个月、一年等)清除该表。
(7) 当你确定这可行时,将其转换为存储过程。您可能每天都可以将其作为一项工作来运行。
希望这有效。当您完成该存储过程时,为什么不将其发布(带有评论)作为答案,以便每个人都可以看到如何去做。另外,请确保您可以在线访问 MS-SqlServer 书籍的副本;Transact-SQL 参考非常宝贵。