2009-02-26 16 views
103

W SQL Server to wstawia 100 rekordów, z tabeli Klienci w tmpFerdeen: -Czy można użyć klauzuli SELECT INTO z UNION [ALL]?

SELECT top(100)* 
INTO tmpFerdeen 
FROM Customers 

Czy da się zrobić SELECT INTO całej 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 

Niezbyt pewny gdzie dodać klauzulę INTO.

+0

Czy na pewno potrzebujesz całego związku? – sfossen

+0

Tak. Ponieważ rekordy są unikalne we wszystkich tabelach. – Ferdeen

Odpowiedz

147

To działa w 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

Również to działa WYBIERZ top 100 * INTO tmpFerdeen OD klientów UNION Wszystko WYBIERZ top 100 * Z CustomerEurope UNION Wszystkie SELECT top 100 * Z CustomerAsia UNION Wszystkie SELECT top 100 * FROM CustomerAmericas (niestety nie można sformatować sql tutaj). Dzięki! – Ferdeen

+1

Jakie jest znaczenie "jako tmp"? – Dave

+0

@chrisVanOpstal, dlaczego wybrałeś top 100? Kiedy wybieramy wszystkie rekordy, daje to błąd jako "Klauzula ORDER BY jest nieprawidłowa w widokach, funkcjach wbudowanych, tabelach pochodnych, podzapytaniach i powszechnych wyrażeniach tabelowych, chyba że podano również TOP lub FOR XML: ". Proszę podać jakieś rozwiązanie. – ShaileshDev

-3

Spróbuj czegoś takiego: Utwórz ostateczną tabelę obiektów, tmpFerdeen ze strukturą związku.

Następnie

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

W SQL Server tymczasowe tabele są tworzone w locie. Chciałbym to zrobić bez tworzenia ostatecznej tabeli obiektów. Dzięki. – Ferdeen

-1

Może spróbować?

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

Brakuje wymaganego aliasu tabeli (i jeśli dodany będzie taki sam jak zaakceptowana odpowiedź) –

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 

Ten "Blablabal" jest konieczne

90

Nie trzeba tabelę pochodzącą w ogóle do tego.

Wystarczy umieścić INTO po pierwszym 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

To powinna być zaakceptowana odpowiedź. – SQB

0

dla kwerend MS Access, to działało:

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 
) 

to nie działa w 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