Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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 будет содержать более одной строки...

Ответ 2

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

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

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

Ответ 3

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

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

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