Многорядная вставка в оператор в MS Access - PullRequest
2 голосов
/ 18 августа 2010

Я новичок в SQL и пытаюсь понять, как вставить несколько записей таблицы в один оператор SQL. Вот мой код:

INSERT INTO [Students](P_Id,FirstName,LastName,class,city,Phone)
SELECT 123,'Avi','Davis',2,'Tel-Mond','03-456789'
UNION
SELECT 234, 'Dani',2,'Dimona',' 02-111'
UNION 
SELECT 345,'Itzik',3,'Ariel', '03-2222'
UNION 
SELECT456, 'Koby', 3, 'Tel-Aviv', '03-333333'
UNION 
SELECT 789,'Moshe' ,2 , 'Tel-Aviv','03-7777777'

Я пробовал всевозможные вариации на тему с «помощью» из разных уроков, но пока ничего из того, что я пробовал, не работает Кажется, что с каждой другой программой БД использование SQL немного отличается.

Есть предложения, как изменить мой код, чтобы он работал с MS Access?

Ответы [ 3 ]

1 голос
/ 27 сентября 2011

Я хотел бы расширить ответы, приведенные здесь, потому что сегодня я попробовал многострочный метод вставки, чтобы повысить производительность в нашем приложении, и НЕ получил какого-либо заметного улучшения.

Я получил его с помощьюподход, аналогичный описанному выше для Рему, но вы, вероятно, хотели UNION ALL, иначе две идентичные строки не будут вставлены, поскольку UNION имеет неявное отличное значение, и мне, кажется, нужен внешний выбор, который был псевдонимом, в противном случае он не работал.Кроме того, когда вы объединяете, как упомянуто выше, вам нужна таблица from в Access, поэтому я следовал соглашению Oracle и создал таблицу с одной строкой под названием DUAL.

INSERT INTO [Students](P_Id,FirstName, LastName, class,  city,Phone)
SELECT * FROM
(
 SELECT 123 As P_ID, 'Avi' As FirstName, 'Davis' As LastName, 2 As Class,
        'Tel-Mond' As City,'03-456789' As Phone FROM DUAL
UNION ALL
 SELECT 456 As P_ID, 'FDA' As FirstName, 'RET' As LastName, 3 As Class,
        'lima' As City,'03-456789' As Phone FROM DUAL
.
.
.
.
) as MyAlias

В моем примере я сделал его более простым и создал единыйтаблица столбцов с колонкой varchar (50).Я попытался сделать это с 1000 строками, и Access пожаловался на «запрос слишком сложный».Я должен был уменьшить его до 49 строк, чтобы успешно вставить.Это говорит о том, что вам нужно было бы объединить ваши вставки в более мелкие порции, чтобы Access мог их принять.

В результате не было никакого увеличения производительности.Это не стоит хлопот и требует логики пакетирования в коде, так что на самом деле для меня это означает, что я буду искать повышение производительности в других местах.

1 голос
/ 18 августа 2010

Вы можете сделать что-то подобное в MS Access, но у вас должна быть таблица from, и вы должны позаботиться о том, чтобы возвращалась только одна строка:

INSERT INTO [Students](P_Id,FirstName, LastName, class,  city,Phone)
SELECT 123 As P_ID, 'Avi' As FirstName, 'Davis' As LastName, 2 As Class,
        'Tel-Mond' As City,'03-456789' As Phone FROM AnyTable
UNION
<...>

Может быть проще использовать VBA и цикл.

0 голосов
/ 19 августа 2010

Access будет выполнять только один оператор SQL в запросе.Обычно в Access вы загружаете данные из CSV-файла или электронной таблицы.Если вы действительно хотите сделать это в SQL, найдите клиента, такого как iSQLviewer, который будет подключаться к большинству баз данных (я не пробовал это делать с Access) и запускать сценарии.

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