Я должен протестировать свой почтовый сервер. Как я могу сделать оператор Select, который выбирает, говорят ID=5469 тысячу раз.
Вы можете использовать оператор UNION ALL.
Попробуйте что-то вроде:
SELECT * FROM tablename WHERE ID = 5469
UNION ALL
SELECT * FROM tablename WHERE ID = 5469
Вам нужно будет повторить оператор SELECT несколько раз, но вы можете написать немного кода VB в Access, чтобы создать динамический оператор SQL, а затем выполнить его. Не очень красиво, но это должно сработать.
Если вы делаете это на сервере sql
declare @cnt int
set @cnt = 0
while @cnt < 1000
begin
select '12345'
set @cnt = @cnt + 1
end
, выберите '12345'
может быть любым выражением
Самый простой способ - создать таблицу с 1000 строками. Назовем его BigTable
. Затем вы должны запросить нужные данные и присоединить их к большой таблице, например:
SELECT MyTable.*
FROM MyTable, BigTable
WHERE MyTable.ID = 5469
на сервере sql попробуйте:
print 'wow'
go 5
вывод:
Beginning execution loop
wow
wow
wow
wow
wow
Batch execution completed 5 times.
Если я понял, что вы имеете в виду, то очень простой способ заключается в том, чтобы соединить производный запрос с таблицей с более чем 1000 строк в ней и поместить туда топ-1000. Это продублирует ваши результаты в 1000 раз.
EDIT: В качестве примера (это MSSQL, я не знаю, сильно ли отличается Access)
SELECT
MyTable.*
FROM
MyTable
CROSS JOIN
(
SELECT TOP 1000
*
FROM
sysobjects
) [BigTable]
WHERE
MyTable.ID = 1234
Создайте вспомогательную таблицу для этой цели:
JUST_NUMBER(NUM INT первичный ключ)
Вставьте (с помощью некоторого (VB) скрипта) числа от 1 до N. Затем выполните этот объединенный запрос:
SELECT MYTABLE.*
FROM MYTABLE,
JUST_NUMBER
WHERE MYTABLE.ID = 5469
AND JUST_NUMBER.NUM <= 1000
Вот способ использования рекурсивного общего табличного выражения для создания некоторых пустых строк, а затем для их перекрестного соединения обратно в нужную строку:
declare @myData table (val int) ;
insert @myData values (666),(888),(777) --some dummy data
;with cte as
(
select 100 as a
union all
select a-1 from cte where a>0
--generate 100 rows, the max recursion depth
)
,someRows as
(
select top 1000 0 a from cte,cte x1,cte x2
--xjoin the hundred rows a few times
--to generate 1030301 rows, then select top n rows
)
select m.* from @myData m,someRows where m.val=666
замените @myData
на вашу настоящую таблицу и измените последний предикат, который подходит.