2009-02-26 3 views
103

В SQL Server это вставляет 100 записей, из таблицы Customers в tmpFerdeen: -Можно ли использовать предложение SELECT INTO с UNION [ALL]?

SELECT top(100)* 
INTO tmpFerdeen 
FROM Customers 

Можно ли сделать SELECT INTO через 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 

Не слишком уверен, где добавить предложение INTO.

+0

Вы уверены, вам нужен союз? – sfossen

+0

Да. Поскольку записи уникальны по всем таблицам. – Ferdeen

ответ

147

Это работает в 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

Также это работает SELECT top 100 * INTO tmpFerdeen FROM Customers UNION Все SELECT top 100 * FROM CustomerEurope UNION Все SELECT top 100 * FROM CustomerAsia UNION Все SELECT top 100 * FROM CustomerAmericas (извините, не могу отформатировать sql здесь). Благодаря! – Ferdeen

+1

Каково значение «как tmp»? – Dave

+0

@chrisVanOpstal, почему вы выбрали 100 лучших? Когда мы выбираем все записи, это дает ошибку как «Предложение ORDER BY недействительно в представлениях, встроенных функциях, производных таблицах, подзапросах и общих табличных выражениях, если также не указаны TOP или FOR XML. ». Пожалуйста, дайте некоторое решение. – ShaileshDev

-3

Попробуйте что-то вроде этого: Создайте итоговую таблицу объектов tmpFerdeen со структурой объединения.

Тогда

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

В SQL Server временные таблицы создаются «на лету». Я хотел бы сделать это, не создавая итоговую таблицу объектов. Благодарю. – Ferdeen

-1

Может попробовать это?

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

Отсутствует требуемый псевдоним таблицы (и если добавлено будет то же самое, что и принятый ответ) –

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 

Это "Blablabal" необходимо

90

Вам не нужно производной таблицы вообще для этого.

Просто поместите INTO после первого 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

Это должен быть принятый ответ. – SQB

0

Для запросов MS Access, это работало:

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 
) 

Это не работает в 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 
Смежные вопросы