Insert into access
SQL-Урок 13. Добавление данных (INSERT INTO)
В предыдущих разделах мы рассматривали работу по получению данных с заранее созданных таблиц. Теперь пора разобрать, каким же образом мы можем создавать/удалять таблицы, добавлять новые записи и удалять старые. Для этих целей в SQL существуют такие операторы, как: CREATE — создает таблицу, ALTER — изменяет структуру таблицы, DROP — удаляет таблицу или поле, INSERT — добавляет данные в таблицу. Начнем знакомство с данной группой операторов из оператора INSERT.
1. Добавление целых строк
Как видно из названия, оператор INSERT используется для вставки (добавления) строк в таблицу базы данных. Добавление можно осуществить несколькими способами:
- — добавить одну полную строку
- — добавить часть строки
- — добавить результаты запроса.
Итак, чтобы добавить новую строку в таблицу, нам необходимо указать название таблицы, перечислить названия колонок и указать значение для каждой колонки с помощью конструкции INSERT INTO название_таблицы (поле1, поле2 . ) VALUES (значение1, значение2 . ). Рассмотрим на примере.
INSERT INTO Sellers (ID, Address, City, Seller_name, Country) VALUES (‘6’, ‘1st Street’, ‘Los Angeles’, ‘Harry Monroe’, ‘USA’)
Также можно изменять порядок указания названий колонок, однако одновременно нужно менять и порядок значений в параметре VALUES.
2. Добавление части строк
В предыдущем примере при использовании оператора INSERT мы явно отмечали имена столбцов таблицы. Используя данный синтаксис, мы можем пропустить некоторые столбцы. Это значит, что вы вводите значение для одних столбцов но не предлагаете их для других. Например:
INSERT INTO Sellers (ID, City, Seller_name) VALUES (‘6’, ‘Los Angeles’, ‘Harry Monroe’)
В данном примере мы не указали значение для двух столбцов Address и Country . Вы можете исключать некоторые столбцы из оператора INSERT INTO, если это позволяет производить определение таблицы. В этом случае должно соблюдаться одно из условий: этот столбец определен как допускающий значение NULL (отсутствие какого-либо значения) или в определение таблицы указанное значение по умолчанию. Это означает, что, если не указано никакое значение, будет использовано значение по умолчанию. Если вы пропускаете столбец таблицы, которая не допускает появления в своих строках значений NULL и не имеет значения, определенного для использования по умолчанию, СУБД выдаст сообщение об ошибке, и это строка не будет добавлена.
3. Добавление отобранных данных
В предыдущей примерах мы вставляли данные в таблицы, прописывая их вручную в запросе. Однако оператор INSERT INTO позволяет автоматизировать этот процесс, если мы хотим вставлять данные из другой таблицы. Для этого в SQL существует такая кострукция как INSERT INTO . SELECT . . Данная конструкция позволяет одновременно выбирать данные из одной таблицы, и вставить их в другую. Предположим мы имеем еще одну таблицу Sellers_EU с перечнем продавцов нашего товара в Европе и нам нужно их добавить в общую таблицу Sellers. Структура этих таблиц одинакова (то же количество колонок и те же их названия), однако другие данные. Для этого мы можем прописать следующий запрос:
INSERT INTO Sellers (ID, Address, City, Seller_name, Country) SELECT ID, Address, City, Seller_name, Country FROM Sellers_EU
Нужно обратить внимание, чтобы значение внутренних ключей не повторялись (поле ID), в противном случае произойдет ошибка. Оператор SELECT также может включать предложения WHERE для фильтрации данных. Также следует отметить, что СУБД не обращает внимания на названия колонок, которые содержатся в операторе SELECT, для нее важно только порядок их расположения. Поэтому данные в первом указанном столбце, что были выбраны из-за SELECT, будут в любом случае заполнены в первый столбец таблицы Sellers, указанной после оператора INSERT INTO, независимо от названия поля.
4. Копирование данных из одной таблицы в другую
Часто при работе с базами данных возникает необходимость в создании копий любых таблиц, с целью резервирования или модификации. Чтобы сделать полную копию таблицы в SQL предусмотрен отдельный оператор SELECT INTO. Например, нам нужно создать копию таблицы Sellers, нужно будет прописать запрос следующим образом:
SELECT * INTO Sellers_new FROM Sellers
В отличие от предыдущей конструкции INSERT INTO . SELECT . , когда данные добавляются в существующую таблицу, конструкция SELECT . INTO . FROM . копирует данные в новую таблицу. Также можно сказать, что первая конструкция импортирует данные, а вторая — экспортирует. При использовании конструкции SELECT . INTO . FROM . следует учитывать следующее:
- — можно использовать любые предложения в операторе SELECT, такие как GROUP BY и HAVING
- — для добавления данных из нескольких таблиц можно использовать объединение
- — данные возможно добавить только одну таблицу, независимо от того, из скольких таблиц они были взяты.
Есть ли способ создать несколько инструкций insert в запросе ms-access?
Я использую MS Access 2003. Я хочу запустить много инструкций insert SQL в так называемом «запросе» в MS Access. Есть ли простой (или действительно любой) способ сделать это?
7 ответов
вы не можете сделать:
но вы можете сделать
что это даст вам, если у вас еще нет данных в таблице? Ну, вы можете создать оператор Select, состоящий из множества союзов выборок с жестко закодированными результатами.
Примечание: я также должен включить некоторую форму фиктивной таблицы (например, onerow), чтобы обмануть доступ к разрешению объединения (в нем должна быть хотя бы одна строка), и вам нужна » верхняя 1 » чтобы убедиться, что вы не получите повторы для таблицы с более чем одной строкой
но опять же, вероятно, было бы проще просто сделать три отдельных оператора insert, особенно, если вы уже создаете вещи в цикле (если, конечно, стоимость выполнения вставок не больше, чем стоимость вашего времени на его кодирование).
лично я бы создал подпрограмму VBA для этого и подключился к базе данных, используя некоторую форму sql-соединения.
С моей головы Код для этого должен выглядеть примерно так:
Я думаю, что нецелесообразно предлагать конкретный интерфейс данных, как это делает Джонатан, когда вы не прояснили контекст, в котором будет выполняться код.
Если хранилище данных является базой данных Jet, нет смысла использовать любую форму ADO, если вы не используете свой код с платформы сценариев, где это предпочтительный выбор. Если вы находитесь в Access, это определенно не так, и DAO является предпочтительным интерфейсом.
No — запрос в Access-это один оператор SQL. Невозможно создать пакет из нескольких операторов в одном объекте запроса. Вы можете создать несколько объектов запроса и запустить их из макроса/модуля.
@Rik Garner: не уверен, что вы подразумеваете под «партией», но
построить, хотя и является одним SQL сообщении, фактически вставит каждую строку по одному (а не все сразу), но в одной транзакции: вы можете проверить это, добавив соответствующее ограничение, например
предполагая, что таблица пуста, выше INSERT INTO..SELECT.. должно работать: тот факт, что это не так, потому что ограничение было проверено после вставки первой строки вместо того, чтобы после того, как все три были вставлены (нарушение ANSI SQL-92, но это MS Access для вас ); тот факт, что таблица остается пустой, показывает, что внутренняя транзакция была откатана.
@David W. Fenton: у вас может быть сильное личное предпочтение DAO, но, пожалуйста, не будьте слишком жесткими к кому-то для выбора альтернативной технологии доступа к данным (в этом случае ADO), особенно для ванили INSERT и когда они квалифицируют свои комментарии: «с моей головы, для этого код должен выглядеть примерно так. » в конце концов, вы не можете использовать DAO для создания CHECK ограничения 🙂
MS Access не позволяет несколько вставок из одного окна sql. Если вы хотите вставить, сказал 10 строк в таблице, сказал movie (mid, mname, mdirector. ), вам необходимо откройте окна sql,
- тип 1-й инструкции, выполнить 1-й инструкции, удалить 1-е полу
- введите 2-й stmt, выполните 2-й stmt, удалите 2-й stmt
- Тип 3-й инструкции, выполнить 3-й инструкции, удалить 3-й инструкции .
очень скучно. Вместо этого вы можете импортировать строки из excel, выполнив:
- щелкните правой кнопкой мыши имя таблицы, которую вы уже создали
- импорт из Excel (открывается диалоговое окно импорт)
- перейдите к файлу excel, содержащему записи, которые будут импортированы в таблице
- нажмите » Добавить копию записей в таблицу:»
- выберите требуемую таблицу (в данном примере фильм)
- нажмите «OK»
- выберите рабочий лист, содержащий данные в электронной таблице
- Нажмите кнопку Готово
весь набор данных в excel был загружен в таблицу «MOVIE»
MS Access также может добавлять данные в таблицу из простого текстового файла. CSV значения (я просто использовал поле заменить все, чтобы удалить все, кроме запятых) и в разделе внешние данные выберите текстовый файл.
Insert into access
При помощи этой инструкции, лежащей в основе запросов на добавление (Append Query), можно добавить одну или множество записей в указанную таблицу. Эта инструкция по функциональности является разновидностью описанной выше инструкции SELECT . INTO. Отличие состоит в том, что информация добавляется в уже существующую таблицу, затирая хранящиеся там данные, но не нарушая при этом ее структуру. Синтаксис для добавления группы записей в таблицу следующий:
INSERT INTO назначение [(поле_1[, поле_2[, . ]])] [IN внешняяБазаДанных]
SELECT [источник.]поле_1[, поле_2[, . ]
FROM выражение [, . ] [IN внешняяБазаДанных]
[WHERE. ]
[GROUP BY. ]
[HAVING. ]
[ORDER BY. ]
[WITH OWNERACCESS OPTION]
Вариант синтаксиса для добавления одной записи:
INSERT INTO назначение [(поле_1[, поле_2[, . ]])]
VALUES (значение_1[, значение_2[, . ])
Описание используемых параметров: назначение. Имя таблицы, в которую добавляются записи. поле_1, поле_2, . . Имена полей, в которые добавляются данные (если они следуют за аргументом назначение) или из которых выбираются данные (если они следуют за аргументом источник). ВнешняяБазаДанных. В конструкции IN можно указать полный путь и имя файла внешней базы данных. Вы можете выбрать информацию из таблиц внешней базы данных (предложение FROM) и вставить итоговую выборку в таблицу внешней базы данных (предложение INSERT INTO). если вы хотите вставить одну запись, можно воспользоваться синтаксисом, содержащим предложение VALUES. Вслед за этим предложением (в круглых скобках) следуют значения, присваиваемые полям, перечисленным после параметра назначение. Значения присваиваются в порядке следования полей. То есть первому полю соответствует первое значение, и т.д. Количество и порядок следования значений в предложении VALUES должны в точности соответствовать количеству и порядку следования полей, перечисленных после параметра назначение.
Примеры
Приведенный в этом примере SQL-оператор иллюстрирует синтаксис для добавления в таблицу одной записи. Этот синтаксис используется практически во всех СУБД, поддерживающих SQL. В данном примере в таблицу Доставка добавляется одна запись, состоящая из двух полей: Название и Телефон. Значения для этих полей перечислены через запятую в конструкции VALUES. Таким образом, после выполнения запроса в таблицу Доставка будет добавлена новая запись, содержащая в поле Название значение Аэрофлот, а в поле Телефон — значение (095) 211-9988. Кроме того, поле КодДоставки автоматически получит очередное значение счетчика, поскольку имеет тип Счетчик (AutoNumber).
Если ввести текст рассматриваемого оператора в запрос, открытый в режиме SQL, a затем переключиться в режим конструктора (Design View), то Microsoft Access автоматически распознает тип запроса и изменит строку оператора в соответствии с принятым для стандартных запросов на добавление (Append Query) стилем:
INSERT INTO Доставка ( Название, Телефон ) SELECT «Аэрофлот »
AS Выражение1, «(095) 211-9988» AS Выражение2;
SQL-оператор, приведенный в этом примере, отбирает информацию из внешнего файла базы данных и добавляет полученную выборку в таблицу открытой (текущей) базы данных. В приведенном примере выбирается информация из таблиц Заказы и Заказано, которые расположены во внешнем файле базы данных DataBase1.mdb (в папке C:Moи Документы). Эти таблицы связаны между собой по полям КодЗаказа (связь задана в конструкции WHERE). Итоговая выборка после группировки, вычисления значений поля Стоимость заказа и сортировки по убыванию по этому же полю, добавляется в таблицу Временная. Таблица Временная должна существовать в целевой базе данных к моменту выполнения запроса. Кроме того, к моменту выполнения запроса в таблице Временная должны существовать поля с именами КодКлиента и Стоимость заказа (именно эти имена полей перечислены в конструкции INTO после имени целевой таблицы). Естественно, эти поля должны соответствовать по типу добавляемым данным. Если хотя бы одно из перечисленных условий не выполняется, записи в таблицу добавлены не будут.
Приведенный в этом примере оператор предназначен для добавления в таблицу Временная группы записей, отобранных из таблиц внешней базы данных. В этом случае также сначала работает хорошо известный оператор на выборку записей, результаты действий которого добавляются в уже существующую таблицу.
Инструкция INSERT INTO
Эта инструкция добавляет одну или несколько записей в таблицу (выполняет запрос на добавление).
Синтаксис
Запрос на добавление нескольких записей:
INSERT INTO конечный_объект [(поле1[, поле2[, . ]])] [IN внешняя_база_данных]
SELECT [источник .]поле1[, поле2[, . ]
FROM выражение_таблицы
Запрос на добавление одной записи:
INSERT INTO конечный_объект [(поле1[, поле2[, . ]])]
VALUES (поле1[, поле2[, . ])
Инструкция INSERT INTO состоит из следующих элементов:
Имя таблицы или запроса, куда добавляются записи.
После аргумента конечный_объект — имена полей, в которые добавляются данные; после аргумента источник — имена полей, из которых извлекаются данные.
Путь к внешней базе данных. Описание пути см. в статье, посвященной предложению IN.
Имя таблицы или запроса, откуда копируются записи.
Одно или несколько имен таблиц, из которых требуется получить записи. Этот аргумент может представлять собой имя отдельной таблицы, результирующее выражение, составленное с использованием операций INNER JOIN, LEFT JOIN или RIGHT JOIN, или сохраненный запрос.
Значения, которые будут добавлены в определенные поля новой записи. Каждое значение вставляется в поле, соответствующее его положению в списке: значение1 добавляется в поле1 новой записи, значение2 — в поле2 и т. д. Необходимо разделять значения запятой и заключать текстовые поля в кавычки (‘ ‘).
Замечания
С помощью инструкции INSERT INTO можно добавить в таблицу одну запись, используя указанный выше синтаксис. В этом случае указываются имена и значения для каждого поля записи. Необходимо указать все поля записи, которым присваиваются значения, и соответствующие значения. Если не указать значение поля, ему будет присвоено значение по умолчанию или NULL. Записи добавляются в конец таблицы.
Инструкцией INSERT INTO можно также воспользоваться для добавления набора записей из другой таблицы или запроса с помощью предложения SELECT. FROM, как показано выше (см. синтаксис запроса на добавление нескольких записей). В этом случае предложение SELECT задает поля для добавления в указанный конечный_объект.
Источник или конечный_объект может быть таблицей или запросом. Если задан запрос, ядро СУБД Microsoft Access добавляет записи ко всем таблицам, которые он возвращает.
Использование инструкции INSERT INTO не является обязательным. Если она указана, она должна предшествовать инструкции SELECT.
Если конечная таблица содержит первичный ключ, убедитесь, что значения, добавляемые в одно или несколько полей первичного ключа, уникальны и отличны от NULL; в противном случае записи не будут добавлены.
Если записи добавляются в таблицу с полем «Счетчик» и вы хотите изменить их нумерацию, не включайте поле «Счетчик» в запрос. Включите поле «Счетчик» в запрос, если вы хотите сохранить исходные значения из поля.
Добавить записи в таблицу другой базы данных можно с помощью предложения IN.
Чтобы создать таблицу, используйте инструкцию SELECT. INTO для получения запроса на создание таблицы.
Перед тем как выполнить запрос на добавление, воспользуйтесь запросом на выборку с такими же условиями отбора, чтобы по полученным результатам определить, какие записи будут добавлены.
Запрос на добавление копирует записи из одной или нескольких таблиц в другую таблицу. При этом таблицы, содержащие добавляемые записи, остаются без изменений.
Вместо добавления записей из другой таблицы можно задать значение каждого поля в отдельной новой записи с помощью предложения VALUES. Если список полей опущен, в предложение VALUES необходимо включить соответствующие значения каждого поля таблицы; в противном случае операция INSERT не будет выполнена. Воспользуйтесь инструкцией INSERT INTO вместе с предложением VALUES для каждой дополнительной записи, которую требуется создать.
Инструкция INSERT INTO в Transact-SQL – несколько способов добавления данных в таблицу
Всем привет! В данной статье речь пойдет о том, как можно добавлять данные в таблицу в Microsoft SQL Server, если Вы уже хоть немного знакомы с языком T-SQL, то наверно поняли, что сейчас мы будем разговаривать об инструкции INSERT, а также о том, как ее можно использовать для добавления данных в таблицу.
Начнем по традиции с небольшой теории.
Инструкция INSERT в T-SQL
INSERT – это инструкция языка T-SQL, которая предназначена для добавления данных в таблицу, т.е. создания новых записей. Данную инструкцию можно использовать как для добавления одной строки в таблицу, так и для массовой вставки данных. Для выполнения инструкции INSERT требуется разрешение на вставку данных (INSERT) в целевую таблицу.
Существует несколько способов использования инструкции INSERT в части данных, которые необходимо вставить:
- Перечисление конкретных значений для вставки;
- Указание набора данных в виде запроса SELECT;
- Указание набора данных в виде вызова процедуры, которая возвращает табличные данные.
Упрощённый синтаксис
- INSERT INTO – это команда добавления данных в таблицу;
- Таблица – это имя целевой таблицы, в которую необходимо вставить новые записи;
- Список столбцов – это перечень имен столбцов таблицы, в которую будут вставлены данные, разделенные запятыми;
- VALUES – это конструктор табличных значений, с помощью которого мы указываем значения, которые будем вставлять в таблицу;
- Список значений – это значения, которые будут вставлены, разделенные запятыми. Они перечисляются в том порядке, в котором указаны столбцы в списке столбцов;
- SELECT – это запрос на выборку данных для вставки в таблицу. Результирующий набор данных, который вернет запрос, должен соответствовать списку столбцов;
- EXECUTE – это вызов процедуры на получение данных для вставки в таблицу. Результирующий набор данных, который вернет хранимая процедура, должен соответствовать списку столбцов.
Вот примерно так и выглядит упрощённый синтаксис инструкции INSERT INTO, в большинстве случаев именно так Вы и будете добавлять новые записи в таблицы.
Список столбцов, в которые Вы будете вставлять данные, можно и не писать, в таком случае их порядок будет определен на основе фактического порядка столбцов в таблице. При этом необходимо помнить этот порядок, когда Вы будете указывать значения для вставки или писать запрос на выборку. Лично я Вам рекомендую все-таки указывать список столбцов, в которые Вы планируете добавлять данные.
Также следует помнить и то, что в списке столбцов и в списке значений, соответственно, должны присутствовать так называемые обязательные столбцы, это те, которые не могут содержать значение NULL. Если их не указать, и при этом у столбца отсутствует значение по умолчанию, будет ошибка.
Еще хотелось бы отметить, что тип данных значений, которые Вы будете вставлять, должен соответствовать типу данных столбца, в который будет вставлено это значение, ну или, хотя бы, поддерживал неявное преобразование. Но я Вам советую контролировать тип данных (формат) значений, как в списке значений, так и в запросе SELECT.
Хватит теории, переходим к практике.
Исходные данные
Для того чтобы добавлять данные в таблицу, нам нужна соответственно сама таблица, давайте ее создадим, и уже в нее будем пробовать добавлять записи.
Примечание! Все примеры будут выполнены в Microsoft SQL Server 2016 Express.
Наша тестовая таблица, будет содержать перечень товаров с ценой.
Также в примерах мы будем использовать процедуру, которая возвращает табличное значение, для добавления данных в таблицу, поэтому давайте ее тоже создадим.
Для примера она у нас будет возвращать данные из только что созданной таблицы TestTable.
Примечание!
Как Вы понимаете, чтение данного материала подразумевает наличные определенных знаний по языку T-SQL, поэтому если Вам что-то непонятно, рекомендую ознакомиться со следующими материалами:
Пример 1 – Добавляем новую запись в таблицу с использованием конструктора табличных значений
Сначала давайте попробуем добавить одну запись и сразу посмотрим на результат, т.е. напишем запрос на выборку.
Вы видите, что мы после названия таблицы перечислили через запятую имена столбцов, в которые мы будем добавлять данные, затем мы указали ключевое слово VALUES и в скобочках также, в том же порядке, через запятую написали значения, которые мы хотим вставить.
После инструкции INSERT я написал инструкцию SELECT и разделил их командой GO.
А теперь давайте представим, что нам нужно добавить несколько строк. Мы для этого напишем следующий запрос.
В данном случае мы добавили три записи, т.е. три строки. После VALUES значения каждой новой строки указаны в скобочках, разделили мы их запятыми.
Пример 2 – Добавляем новые строки в таблицу с использованием запроса SELECT
Очень часто возникает необходимость добавлять много данных в таблицу, например, на основе запроса на выборку, т.е. SELECT. Для этого вместо VALUES нам всего лишь нужно указать запрос.
В данном примере мы написали запрос SELECT, который возвращает данные из таблицы TestTable, но не все, а только те, у которых идентификатор больше 2. А результат вставили все в ту же таблицу TestTable.
В качестве примера того, как можно добавлять записи в таблицу без указания списка столбцов, давайте напишем еще один запрос на вставку данных, который сделает равно то же самое что и запрос выше, только в нем не будет перечисления столбцов для вставки.
В данном случае мы уверены в том, что в таблице TestTable первый столбец это ProductName, а второй Price, поэтому мы можем позволить себе написать именно так. Но, снова повторюсь, на практике лучше указывать список столбцов.
Если Вы заметили, я во всех примерах не указывал столбец Id, а он у нас есть, ошибки не возникло, так как данный столбец со свойством IDENTITY, он автоматически генерирует идентификаторы, поэтому в такой столбец вставить данные просто не получится.
Пример 3 – Добавляем новые записи в таблицу с использованием хранимой процедуры
Сейчас давайте вставим в таблицу данные, которые нам вернёт хранимая процедура. Смысл здесь такой же, вместо VALUES и вместо запроса мы указываем вызов процедуры. Но как Вы понимаете, порядок и количество столбцов, возвращаемых процедурой, должен строго совпадать со списком столбцов для вставки (даже если список столбцов не указан).
Надеюсь, данный материал помог Вам разобраться с инструкцией INSERT INTO, а у меня все, пока!