Как выполнить несколько операторов SQL в Редакторе запросов Access?

у меня есть текстовый файл с несколькими инструкциями SQL, которые я хочу запустить на базе данных 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.
что, вероятно, можно было бы принять за указание на то, что это невозможно для выполнения нескольких операторов.

Ok, поэтому вопрос: Можно ли выполнить несколько операторов в редактор запросов, или можно каким-то образом выполнить инструкции sql в пакете файл в/on / против доступа.

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

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

4 ответов


вы можете легко написать немного кода, который будет читать в файл. Вы можете либо принять один оператор 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

вы можете расширить размещение некоторых ошибок msg, если один оператор не работает, например as

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

независимо от того, выше split () и string read действительно alow ваш sql, чтобы быть на более чем одной строке...


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

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

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


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

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

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


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

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