2009-02-26 18 views
103

In SQL Server questa inserti 100 record, dalla tabella Clienti in tmpFerdeen: -È possibile utilizzare la clausola SELECT INTO con UNION [ALL]?

SELECT top(100)* 
INTO tmpFerdeen 
FROM Customers 

E 'possibile fare un SELECT INTO in un'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 
Non

troppo sicuro dove aggiungere la clausola INTO.

+0

Sei sicuro hai bisogno del sindacato tutto? – sfossen

+0

Sì. Poiché i record sono unici in tutte le tabelle. – Ferdeen

risposta

147

Questo funziona in 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

Anche questo funziona SELECT top 100 * INTO tmpFerdeen FROM Customers UNION Tutto SELECT top 100 * FROM CustomerEurope UNION Tutto SELECT top 100 * FROM CustomerAsia UNION Tutto SELECT top 100 * FROM CustomerAmericas (sorry non può formattare lo sql qui). Grazie! – Ferdeen

+1

Qual è il significato di "as tmp"? – Dave

+0

@chrisVanOpstal, perché hai selezionato i primi 100? Quando selezioniamo tutti i record, restituisce un errore as- "La clausola ORDER BY non è valida nelle viste, funzioni inline, tabelle derivate, sottoquery e espressioni di tabella comuni, a meno che non sia specificato anche TOP o FOR XML. ". Per favore, dai una soluzione. – ShaileshDev

-3

Prova in questo modo: Crea la tabella degli oggetti finale, tmpFerdeen con la struttura dell'unione.

Poi

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

In SQL Server le tabelle temporanee vengono create al volo. Mi piacerebbe farlo senza creare una tabella degli oggetti finale. Grazie. – Ferdeen

-1

forse provare questo?

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

Manca l'alias di tabella richiesto (e se aggiunto sarà uguale alla risposta accettata) –

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 

Questa "Blablabal" è necessario

90

Non hai bisogno di una tabella derivata a tutti per questo.

appena messo il INTO dopo la prima 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

Questa dovrebbe essere la risposta accettata. – SQB

0

Per le query di MS Access, questo ha funzionato:

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 
) 

questo non ha funzionato in 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