Как выполнить несколько операторов SQL в редакторе запросов Access? - PullRequest
36 голосов
/ 03 декабря 2009

У меня есть текстовый файл с несколькими операторами SQL, который я хочу запустить в базе данных Access. Я думал, что это возможно с помощью Access ' Редактор запросов. Итак, я иду в этот редактор и вставляю утверждения:

insert into aFewYears (yr) values ('2000')
insert into aFewYears (yr) values ('2001')
insert into aFewYears (yr) values ('2002')
insert into aFewYears (yr) values ('2003')

Пытаясь запустить их (нажав красный восклицательный знак), я получаю
Missing semicolon (;) at end of SQL statement.

Это может быть принято как указание на то, что редактор позволит выполнить несколько заявлений. Итак, я изменяю утверждения и добавляю такой точка с запятой в конце:

insert into aFewYears (yr) values ('2000');
insert into aFewYears (yr) values ('2001');
insert into aFewYears (yr) values ('2002');
insert into aFewYears (yr) values ('2003');

Тогда я получаю
Characters found after end of SQL statement.
что, вероятно, может быть принято в качестве указания на то, что это невозможно выполнить несколько операторов.

Хорошо, поэтому вопрос: возможно ли выполнить несколько операторов в редактор запросов, или есть возможность каким-то образом выполнить пакетные операторы SQL в файл в / в / против доступа.

Спасибо / Рене

edit Операторы вставки использовались в качестве примера, и я понимаю, что они не идеальны, потому что все они идут в одну и ту же таблицу, и такую ​​вещь, очевидно, можно как-то решить, используя одну инструкцию, которая есть союз или что-то. В моем конкретном случае, который я пытаюсь решить, файл содержит не только операторы вставки, но и операторы таблиц и операторы вставок с различными базовыми таблицами. Поэтому я надеялся (и все еще надеюсь), что есть что-то вроде моего любимого SQL * Plus для Oracle, которое может выполнять файл со всеми видами операторов SQL.

Ответы [ 6 ]

29 голосов
/ 03 декабря 2009

Вы можете легко написать битовый код, который будет читаться в файле. Вы можете принять один SQL-оператор на строку или использовать;

Итак, если у вас есть текстовый файл, такой как:

insert into tblTest (t1) values ('2000');

update tbltest set t1 = '2222'
       where id = 5;


insert into tblTest (t1,t2,t3) 
       values ('2001','2002','2003');

Обратите внимание, что в приведенном выше текстовом файле мы можем размещать операторы sql более чем в одной строке.

код, который вы можете использовать для чтения + запуска вышеуказанного скрипта:

Sub SqlScripts()

   Dim vSql       As Variant
   Dim vSqls      As Variant
   Dim strSql     As String
   Dim intF       As Integer

   intF = FreeFile()
   Open "c:\sql.txt" For Input As #intF
   strSql = input(LOF(intF), #intF)
   Close intF
   vSql = Split(strSql, ";")

   On Error Resume Next
   For Each vSqls In vSql
      CurrentDb.Execute vSqls
   Next

End Sub

Вы можете расширить сообщение об ошибке, если один оператор не работает, например,

if err.number <> 0 then
   debug.print "sql err" & err.Descripiton & "-->" vSqls
end dif

Несмотря на это, вышеупомянутые split () и чтение строки позволяют вашему sql находиться на более чем одной строке ...

15 голосов
/ 03 декабря 2009

К сожалению, AFAIK, вы не можете запустить несколько операторов SQL под одним именованным запросом в Access в традиционном смысле.

Вы можете сделать несколько запросов, затем связать их вместе с VBA (DoCmd.OpenQuery, если память служит).

Вы также можете связать кучу вещей вместе с UNION, если хотите.

0 голосов
/ 15 февраля 2019

«Я надеялся (и все еще надеюсь), что есть что-то вроде моего любимого SQL * Plus для Oracle, которое может выполнять файл со всеми видами операторов SQL.»

Если вы ищете простую программу, которая может импортировать файл и выполнять в нем SQL-операторы, взгляните на DBWConsole (бесплатное программное обеспечение). Я использовал его для обработки сценариев DDL (схема таблиц), а также запросов действий. Он не возвращает наборы данных, поэтому он бесполезен для запросов SELECT. Он поддерживает однострочные комментарии с префиксом - но не многострочные комментарии, заключенные в / * * /. Он поддерживает параметры командной строки.

enter image description here

Если вам нужен интерактивный пользовательский интерфейс, такой как Oracle SQL Developer или SSMS for Access, то ссылка Мэтью Лока на WinSQL - это то, что вы должны попробовать.

0 голосов
/ 30 декабря 2018

создать такой макрос

Опция сравнения базы данных

Sub a ()

DoCmd.RunSQL "УДАЛИТЬ * из TABLENAME, где УСЛОВИЯ"

DoCmd.RunSQL "УДАЛИТЬ * из TABLENAME, где УСЛОВИЯ"

End Sub

0 голосов
/ 01 февраля 2018

Лучше просто создать файл XLSX с именами полей в верхней строке. Создайте его вручную или с помощью Mockaroo. Экспортируйте его в Excel (или CSV), а затем импортируйте в Access, используя Новый источник данных -> Из файла

ИМХО, это лучший и самый эффективный способ сделать это в Access.

0 голосов
/ 18 января 2014

Возможно, вам будет удобнее использовать стороннюю программу для ввода запросов в Access, например WinSQL Я думаю, что из памяти WinSQL поддерживает несколько запросов через пакетную функцию.

В конечном счете, мне было проще написать программу на Perl для выполнения массовых вставок в Access через ODBC. Вы можете использовать vbscript или любой другой язык, который поддерживает ODBC.

Затем вы можете делать все что угодно и иметь собственную сложную логику для обработки импорта.

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