2010-03-18 7 views
7

Мне нужно проверить мой почтовый сервер. Как я могу сделать оператор Select , который выбирает идентификатор ID = 5469 тысячу раз.Сделать SQL Выберите одну и ту же строку несколько раз

+4

Что поставщик базы данных? –

+0

MS Access ... using System.OleDb :) –

+0

Можете ли вы использовать Excel для создания запроса? Вы пытаетесь создать 1 запрос времени или вам нужно выполнить подпрограмму или функцию VBA? – THEn

ответ

-2

В SQL Server попробовать:

print 'wow' 
go 5 

выход:

Beginning execution loop 
wow 
wow 
wow 
wow 
wow 
Batch execution completed 5 times. 
+0

Это даст результат с 1000 строк? – spender

+0

@spender, вы хотели бы видеть выход образца 1000 раз? или достаточно 5? если вы не видите, что он делает это 5 раз, а у выходного файла 5 раз, то вам нужна большая помощь. Op никогда не говорит, что хочет получить набор результатов с 1000 строк, OP говорит, что они тестируют, и ему нужен оператор Select, который выбирает значение ID = 5469 в тысячу раз. «Один из 1000 строк - это совсем другой тест, чем один select 1000 раз. –

+0

Я просто подозреваю, что это не то, о чем спрашивал ОП. Насколько я понимаю, они хотят получить набор результатов с 1000x той же строки. Печать значения x раз не эквивалентна. Я вижу, что у нас есть различная интерпретация того, что было задано, вот и все. – spender

1

Если ваш делают это в SQL Server,

declare @cnt int 
set @cnt = 0 

while @cnt < 1000 
begin 
    select '12345' 
    set @cnt = @cnt + 1 
end 

select '12345' может быть любое выражение

4

You можешь использовать утверждение UNION ALL.

Попробуйте что-то вроде:

SELECT * FROM tablename WHERE ID = 5469 
UNION ALL 
SELECT * FROM tablename WHERE ID = 5469 

Вы должны были бы повторить ЗЕЬЕСТ кучу раз, но вы можете написать немного VB кода в Access создать динамический оператор SQL, а затем выполнить его. Не очень, но это должно сработать.

+5

ничего себе! 'UNION ALL'x1000 - сомневаюсь, что Access может когда-либо обрабатывать такой запрос =) – incarnate

17

Если я получу ваш смысл, то очень простой способ - перекрестно присоединить полученный производный запрос к таблице с более чем 1000 строк в ней и поставить на нее 1000 лучших. Это удвоит ваши результаты в 1000 раз.

EDIT: В качестве примера (Это MSSQL, я не знаю, если доступ сильно отличается)

SELECT 
    MyTable.* 
FROM 
    MyTable 
CROSS JOIN 
(
    SELECT TOP 1000 
     * 
    FROM 
     sysobjects 
) [BigTable] 
WHERE 
    MyTable.ID = 1234 
+0

Можем ли мы установить переменную вместо установки точного числа? Например, ... ... выберите top @i from ... 'Поскольку у меня есть запрос с столбцом с именем' number', я хочу повторить эту строку в столбце 'number'. например, если у меня есть строка, которая имеет номер столбца 2, то она будет повторять этот столбец два раза и продолжать делать это для всех строк. – Hamed

4

Создайте вспомогательную таблицу для этой цели:
JUST_NUMBER(NUM INT primary key)
Вставка (с помощью некоторых (VB) сценарий) чисел от 1 до N. затем выполнить этот запрос несвязанные:

SELECT MYTABLE.* 
FROM MYTABLE, 
     JUST_NUMBER 
WHERE MYTABLE.ID = 5469 
    AND JUST_NUMBER.NUM <= 1000 
2

Вот способ использования рекурсивного общего табличного выражения, чтобы генерировать несколько пустых строк, то чтобы пересечь присоединиться к ним обратно на нужную строку:

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 для вашей реальной таблицы и изменять конечный предикат в соответствии.

-1

Простым способом является создание таблицы с 1000 рядами. Назовем это BigTable. Тогда вы бы запросить данные, которые вы хотите, и присоединиться к ней с большим столом, как это:

SELECT MyTable.* 
FROM MyTable, BigTable 
WHERE MyTable.ID = 5469 
0

создать таблицу # tmp1 (ID INT, FLD VARCHAR (макс)) вставки в # tmp1 (ID, FLD) значения (1, 'Привет!'), (2, 'мир'), (3, 'хороший день!')

выберите * из # tmp1 пойти

выберите * из # tmp1 где id = 3 go 1000

откидной стол # tmp1

1

простой способ ...

Это существует только одна строка в БД

sku = 52 , description = Skullcandy Inkd Green ,price = 50,00 

Try связать другую таблицу, в которой нет ключа ограничения в основной таблице

Оригинал Запрос

SELECT Prod_SKU , Prod_Descr , Prod_Price FROM dbo.TB_Prod WHERE Prod_SKU = N'52' 

Функциональная Запрос ... добавление не связанной таблицы, называемой «dbo.TB_Labels»

SELECT TOP ('times') Prod_SKU , Prod_Descr , Prod_Price FROM dbo.TB_Prod,dbo.TB_Labels WHERE Prod_SKU = N'52' 
0

В postgres есть хорошая функция, называемая generate_series. Таким образом, в PostGreSQL это так просто, как:

select information from test_table, generate_series(1, 1000) where id = 5469 

Таким образом, запрос выполняется в 1000 раз.

Пример POSTGRESQL:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; --To be able to use function uuid_generate_v4() 

--Create a test table 
create table test_table (
    id serial not null, 
    uid UUID NOT NULL, 
    CONSTRAINT uid_pk PRIMARY KEY(id)); 

-- Insert 10000 rows 
insert into test_table (uid) 
select uuid_generate_v4() from generate_series(1, 10000); 

-- Read the data from id=5469 one thousand times 
select id, uid, uuid_generate_v4() from test_table, generate_series(1, 1000) where id = 5469; 

Как вы можете увидеть в приведенном ниже результате, данные из UID считывается в 1000 раз, что подтверждается генерации нового UUID на каждом новом ряду.

id |uid         |uuid_generate_v4 
---------------------------------------------------------------------------------------- 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"5630cd0d-ee47-4d92-9ee3-b373ec04756f" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"ed44b9cb-c57f-4a5b-ac9a-55bd57459c02" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"3428b3e3-3bb2-4e41-b2ca-baa3243024d9" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"7c8faf33-b30c-4bfa-96c8-1313a4f6ce7c" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"b589fd8a-fec2-4971-95e1-283a31443d73" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"8b9ab121-caa4-4015-83f5-0c2911a58640" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"7ef63128-b17c-4188-8056-c99035e16c11" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"5bdc7425-e14c-4c85-a25e-d99b27ae8b9f" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"9bbd260b-8b83-4fa5-9104-6fc3495f68f3" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"c1f759e1-c673-41ef-b009-51fed587353c" 
5469|"10791df5-ab72-43b6-b0a5-6b128518e5ee"|"4a70bf2b-ddf5-4c42-9789-5e48e2aec441" 

Конечно другие блоки данных не обязательно будет иметь ту же функцию, но это может быть сделано:

here Смотрите и

Смежные вопросы