Я пишу сценарий, который генерирует случайные данные. У меня есть две таблицы, одна из которых хранит первые имена, а во-вторых, хранит фамилии. Я хочу получить, например. 1000 случайных пар имени и фамилии. я могу достичь этого, используя следующий код:получить случайные верхние n строк, где n больше количества строк в таблице
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 и заполнить ее случайными строками, пока не будет достаточно строк. Но мне интересно, можно ли это сделать с помощью одного выбора? Я в настоящее время использую sql-сервер 2012 на моем ПК, но я был бы признателен, если бы смог запустить его под SQL Server 2008.
Это должно быть 100% sql? потому что вы можете просто получить случайное 1000 имя и случайные 1000 фамилий и быстро их объединить на прикладном уровне и даже обрабатывать короткие таблицы. – xeo