Ответ 1
В SQL Server
и MySQL
, INTO
- чистый синтаксический сахар.
Никакой разницы.
Oracle
и PostgreSQL
требуют, чтобы это ключевое слово присутствовало, и стандарты AFAIR
, ANSI
SQL
тоже.
Я часто вижу два стиля, INSERT выбирает и вставляет в 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
спасибо заранее, Джордж
В SQL Server
и MySQL
, INTO
- чистый синтаксический сахар.
Никакой разницы.
Oracle
и PostgreSQL
требуют, чтобы это ключевое слово присутствовало, и стандарты AFAIR
, ANSI
SQL
тоже.
Они одинаковы; INTO
является необязательным.
Я считаю, что два приведенных вами утверждения фактически совпадают. Оператор 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
SELECT...INTO
создает новую таблицу, а для INSERT...SELECT
требуется существующая таблица. Таким образом, существуют соображения безопасности и возможные проблемы с производительностью.
Кроме того, при SELECT...INTO
, новая таблица имеет одинаковые столбцы, но не содержит никаких ключей или ограничений, поэтому лучше всего создать временную резервную копию.