Использование INSERT ... SELECT - PullRequest
1 голос
/ 05 мая 2011

Как работает этот вариант INSERT (см. Ссылку)?

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

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

Также может ли он использоваться для замены ВСТАВКИ и ОБНОВЛЕНИЯ? Если это можно использовать таким образом, это ограничивается вставкой статических значений (выберите value1 = blah ...) или есть способ передать значение NOW ()?

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Строки, возвращаемые из запроса SELECT, просто вставляются, как если бы вы сами указывали все строки, используя набор выражений VALUES.Количество полей и типы должны совпадать в обоих случаях.

И да, учитывая, что у вас была таблица типа ARTICLES(ID, TITLE, BODY, DATE), и вы хотели, чтобы во время вставки в поле DATE было установлено значение NOW(), вы можетесделали что-то вроде этого:

INSERT articles(title, body, date)
SELECT title, body, NOW()
FROM other_articles

Тогда вместо столбца даты из таблицы other_articles будет использоваться значение NOW().

2 голосов
/ 05 мая 2011

Вставка не может выполнять обновления - она ​​может только вставлять данные в таблицу, но не обновлять существующие данные.

Не ограничивается статическими значениями.

Insert Into SomeTable (FirstName, LastName, FullName, ModifiedDate, Comment, Age)

Select FirstName,
       LastName,
       FirstName + ' ' + LastName,
       GetDate(),
       'This is the best comment ever',
       dbo.CustomFunctionToCalculateAge(DateOfBirth)

From Users

Вы также можете опустить объявление столбца (хотя и не рекомендуется)

Insert Into Ages
Select 10

Вы всегда должны убедиться, что вставляемый тип данных соответствует типу данных столбца.

1 голос
/ 05 мая 2011

вставляет данные в таблицу california_authors с именами столбцов au_id, au_lname, au_fname и получает данные из оператора select select au_id, au_lname, au_fname from authors where state = 'CA'

вышеприведенный оператор select дает таблицу с 3 столбцами, которые соответствуютномер столбца вставки.

скажем, у вас есть таблица ( даты рождения )

id |имя |дата рождения

тогда вы можете сделать вставку, подобную этой

insert birthdates (id,firstname,birthdate) select 1,'Steven',NOW()

, которая вставит новую строку в даты рождения с определенными значениями.

Вы также можете комбинировать выборку данных из таблиц с добавлением from и «статически» вставкой данных, определяя значение в select

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