2009-02-26 23 views
103

En SQL Server Esto inserta 100 registros, de la tabla Clientes en tmpFerdeen: -¿Es posible usar la cláusula SELECT INTO con UNION [ALL]?

SELECT top(100)* 
INTO tmpFerdeen 
FROM Customers 

¿Es posible hacer un SELECT INTO a través de una UNION ALL SELECT: -

SELECT top(100)* 
FROM Customers 
UNION All 
SELECT top(100)* 
FROM CustomerEurope 
UNION All 
SELECT top(100)* 
FROM CustomerAsia 
UNION All 
SELECT top(100)* 
FROM CustomerAmericas 
No

muy seguro dónde agregar la cláusula INTO.

+0

¿Seguro necesitas todo el sindicato? – sfossen

+0

Sí. Como los registros son únicos en todas las tablas. – Ferdeen

Respuesta

147

Esto funciona en SQL Server:

SELECT * INTO tmpFerdeen FROM (
    SELECT top 100 * 
    FROM Customers 
    UNION All 
    SELECT top 100 * 
    FROM CustomerEurope 
    UNION All 
    SELECT top 100 * 
    FROM CustomerAsia 
    UNION All 
    SELECT top 100 * 
    FROM CustomerAmericas 
) as tmp 
+1

También funciona SELECCIONAR arriba 100 * INTO tmpFerdeen FROM Clientes UNIÓN Todos SELECCIONAR arriba 100 * DE CustomerEurope UNION Todos SELECCIONAR 100 mejores * DE CustomerAsia UNION All SELECT top 100 * DE CustomerAmericas (lo siento, no se puede formatear el sql aquí). ¡Gracias! – Ferdeen

+1

¿Cuál es el significado de "como tmp"? – Dave

+0

@chrisVanOpstal, ¿por qué has seleccionado las 100 mejores? Cuando seleccionamos todos los registros, da error como- "La cláusula ORDER BY no es válida en vistas, funciones en línea, tablas derivadas, subconsultas y expresiones de tablas comunes, a menos que también se especifique TOP o FOR XML. ". Por favor dame alguna solución. – ShaileshDev

-3

Pruebe algo como esto: Cree la tabla de objetos final, tmpFerdeen con la estructura de la unión.

Entonces

INSERT INTO tmpFerdeen (
SELECT top(100)* 
FROM Customers 
UNION All 
SELECT top(100)* 
FROM CustomerEurope 
UNION All 
SELECT top(100)* 
FROM CustomerAsia 
UNION All 
SELECT top(100)* 
FROM CustomerAmericas 
) 
+0

En SQL Server, las tablas temporales se crean sobre la marcha. Me gustaría hacer esto sin crear una tabla de objetos final. Gracias. – Ferdeen

-1

quizás tratar esto?

SELECT * INTO tmpFerdeen (
SELECT top(100)* 
FROM Customers 
UNION All 
SELECT top(100)* 
FROM CustomerEurope 
UNION All 
SELECT top(100)* 
FROM CustomerAsia 
UNION All 
SELECT top(100)* 
FROM CustomerAmericas) 
+0

Falta el alias de tabla requerido (y si se agrega será la misma respuesta aceptada) –

5
SELECT * INTO tmpFerdeen FROM 
(SELECT top(100)* 
FROM Customers 
UNION All 
SELECT top(100)* 
FROM CustomerEurope 
UNION All 
SELECT top(100)* 
FROM CustomerAsia 
UNION All 
SELECT top(100)* 
FROM CustomerAmericas) AS Blablabal 

Este "Blablabal" es necesario

90

No necesita una tabla derivada en absoluto para esto.

Sólo hay que poner el INTO después de la primera SELECT

SELECT top(100)* 
INTO tmpFerdeen 
FROM Customers 
UNION All 
SELECT top(100)* 
FROM CustomerEurope 
UNION All 
SELECT top(100)* 
FROM CustomerAsia 
UNION All 
SELECT top(100)* 
FROM CustomerAmericas 
+1

Esta debería ser la respuesta aceptada. – SQB

0

Para consultas de MS Access, esto funcionó:

SELECT * INTO tmpFerdeen FROM( 
    SELECT top(100) * 
    FROM Customers 
UNION All 
    SELECT top(100) * 
    FROM CustomerEurope 
UNION All 
    SELECT top(100) * 
    FROM CustomerAsia 
UNION All 
    SELECT top(100) * 
    FROM CustomerAmericas 
) 

esto no funciona en MS Access

SELECT top(100) * 
    INTO tmpFerdeen 
    FROM Customers 
UNION All 
    SELECT top(100) * 
    FROM CustomerEurope 
UNION All 
    SELECT top(100) * 
    FROM CustomerAsia 
UNION All 
    SELECT top(100) * 
    FROM CustomerAmericas 
Cuestiones relacionadas