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