2010-03-18 31 views
7

Necesito probar mi servidor de correo. ¿Cómo puedo hacer una instrucción Select que selecciona decir ID = 5469 mil veces.Hacer SQL Seleccionar la misma fila varias veces

+4

¿Cuál es el proveedor de base de datos? –

+0

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

+0

¿Se puede usar Excel para crear una consulta? ¿Estás intentando crear una consulta de tiempo o necesitas una Subrutina o función de VBA? – THEn

Respuesta

-2

en SQL intento servidor:

print 'wow' 
go 5 

de salida:

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

¿Esto le dará un conjunto de resultados con 1000 filas? – spender

+0

@spender, ¿le gustaría ver la salida de muestra 1000 veces? o es 5 suficiente? si no puede ver que lo hace 5 veces y la salida de muestra lo tiene 5 veces, entonces necesita mucha ayuda. Op nunca dice que quieren un conjunto de resultados con 1000 filas, OP dice que están probando y necesitan un 'Seleccionar instrucción que selecciona decir ID = 5469 mil veces. Una selección de 1000 filas es una prueba bastante diferente a la selección de 1000 veces. –

+0

Sospecho que esto no es lo que OP estaba preguntando. Por lo que yo entiendo, quieren un conjunto de resultados con 1000x en la misma fila. Imprimir un valor x veces no es equivalente. Veo que tenemos una interpreación diferente de lo que se pidió, eso es todo. – spender

1

Si su están haciendo esto en SQL Server

declare @cnt int 
set @cnt = 0 

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

select '12345' puede ser cualquier expresión

4

Usted puedo usar la declaración UNION ALL.

Pruebe algo como:

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

Habría que repetir la instrucción SELECT un montón de veces, pero se podría escribir un poco de código VB en el acceso a crear una sentencia de SQL dinámico y luego ejecutarlo. No es bonito, pero debería funcionar.

+5

¡guau! 'UNION ALL'x1000: duda de que Access pueda manejar esa consulta =) – incarnate

17

Si entiendo su significado, entonces una forma muy simple es juntar una consulta derivada en una tabla con más de 1000 filas y poner un top 1000 en eso. Esto duplicaría tus resultados 1000 veces.

EDIT: A modo de ejemplo (Esto es MSSQL, no sé si el acceso es muy diferente)

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

¿Podemos establecer una variable en lugar de establecer un número exacto? Por ejemplo '... Seleccione arriba @i de ...' Debido a que tengo una consulta que tiene una columna llamada 'número', quiero repetir esa fila en' columna' veces. por ejemplo, si tengo una fila cuya columna numérica es 2, repetiría esa columna dos veces y continuaría haciendo esto para todas las filas. – Hamed

4

Crear una mesa de ayuda para este propósito:
JUST_NUMBER(NUM INT primary key)
Insertar (con la ayuda de algunos (VB) script) los números de 1 a N. luego ejecutar esta consulta sin unir:

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

Aquí está una manera de utilizar una expresión de tabla común recursiva para generar algunas filas vacías, a continuación, cruzar unirse a ellos de nuevo en su fila deseada:

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 

sustituto @myData para su mesa real, y alterar el predicado final para adaptarse.

-1

La manera fácil es crear una tabla con 1000 filas. Vamos a llamarlo BigTable. De allí tendría que consultar a los datos que desea y unirlo con la mesa grande, como este:

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

crear la tabla # tmp1 (id int, varchar FLD (max)) inserción en # tmp1 (id, FLD) valores (1, '¡Hola!'), (2, 'mundo'), (3, 'buen día!')

seleccionar * de # tmp1 ir

seleccionar * de # tmp1 donde id = 3 ir 1000

drop table # tmp1

1

manera fácil ...

Esto sólo existe una fila en la Trata DB

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

relacionar otra tabla en la que no tiene ninguna restricción de clave a la tabla principal

búsqueda original

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

La consulta Funcional ... agregando una tabla no relacionada llamada '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

En postgres hay una bonita función llamada generate_series. Así que en PostgreSQL es tan simple como:

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

De esta manera, la consulta se ejecuta 1000 veces.

Ejemplo para 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; 

Como se puede ver en el resultado a continuación, los datos de UID es leído 1000 veces como se confirma por la generación de un nuevo UUID en cada nueva fila.

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" 

Por supuesto otra DBs no necesariamente tienen la misma función, pero se podía hacer:

Ver here y

Cuestiones relacionadas