我正在编写一个生成随机数据的脚本。我有两个表,一个存储名字,第二个存储姓氏。我想获得例如 1000 对随机的名字和姓氏。我可以使用以下代码实现它:
with x as (
select top 1000 f.firstName from dbo.firstNames f order by newid()
), xx as (
select x.firstName, row_number() over(order by x.firstName) as nameNo from x
), y as (
select top 1000 s.surName from dbo.surNames s order by newid()
), yy as (
select y.surName, row_number() over(order by y.ulica) as nameNo from y
)
select xx.firstName, yy.surName
from xx inner join yy on (xx.nameNo=yy.nameNo)
...但是如果我的一张表包含少于 1000 行怎么办?我想知道如何从表中获取多于 n 行,其中 n 小于表/视图中的行数,并且您不介意重复的结果。我能想到的唯一方法是使用临时表和while循环,并用随机行填充它,直到有足够的行。但我想知道是否可以通过一次选择来做到这一点?我目前在我的 PC 上使用 sql server 2012,但如果我也可以在 sql server 2008 下运行它,我将不胜感激。