Различия между INSERT выбрать и вставить в выбор? - PullRequest
19 голосов
/ 27 августа 2009

Я часто вижу два стиля: INSERT select и вставка в select, в чем различия? Они одинаковые?

Я использую SQL Server 2008 Enterprise.

Вот два примера.

INSERT california_authors (au_id, au_lname, au_fname)
SELECT au_id, au_lname, au_fname
FROM authors
WHERE State = 'CA'

http://www.sqlteam.com/article/using-select-to-insert-records

INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name, Sales, Date
FROM Sales_Information

http://www.1keydata.com/sql/sqlinsert.html

спасибо заранее, George

Ответы [ 4 ]

25 голосов
/ 27 августа 2009

В SQL Server и MySQL, INTO - это чистый синтаксический сахар.

Без разницы.

Oracle и PostgreSQL требуют, чтобы это ключевое слово присутствовало, и, AFAIR, ANSI SQL стандарты делают то же самое.

6 голосов
/ 27 августа 2009

Они одинаковые; INTO просто необязательно.

2 голосов
/ 27 августа 2009

Я полагаю, что два утверждения, которые вы перечислили, фактически совпадают. Инструкция INTO отсутствует в первом пакете, но подразумевается как часть инструкции INSERT.

В целях иллюстрации ниже приведены несколько различных форм использования оператора INSERT.

SELECT 
    1 AS ID ,
    'SomeText' AS SomeText
INTO #tmpTableName

INSERT INTO #tmpTableName (ID,SomeText) 
SELECT 2, 'Text' 

INSERT INTO #tmpTableName (ID,SomeText) 
VALUES(3, 'MoreText')

SELECT * FROM #tmpTableName

DROP TABLE #tmpTableName
1 голос
/ 08 июня 2011

SELECT...INTO создает новую таблицу, тогда как INSERT...SELECT требует существующей таблицы. Таким образом, существуют последствия для безопасности и возможные проблемы с производительностью.

Кроме того, с SELECT...INTO новая таблица имеет те же столбцы, но не содержит ключей или ограничений, поэтому лучше всего просто создать временную резервную копию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...