我有一个文本文件,其中包含一些我想在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')
Run Code Online (Sandbox Code Playgroud)
试图运行它们(通过敲击红色感叹号)我收到了
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');
Run Code Online (Sandbox Code Playgroud)
然后我得到一个
Characters found after end of SQL statement.
可能被视为不可能执行多个语句的指示.
好的,所以问题是:是否可以在查询编辑器中执行多个语句,或者是否可以以某种方式批量执行文件中/对/ Access中的sql语句.
谢谢/雷内
编辑插入语句被用作一个例子,我意识到它们并不完美,因为它们都会转到同一个表,这样的事情显然可以通过使用一个带有union或其他东西的语句来解决.在我试图解决的实际情况中,该文件不仅包含插入语句,还包含创建表语句和插入具有不同基础表的语句.所以我希望(并且仍然希望)有一些像我心爱的SQL*Plus for Oracle可以执行带有各种SQL语句的文件.
Alb*_*lal 29
您可以轻松编写将在文件中读取的位代码.你可以假设每行一个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');
Run Code Online (Sandbox Code Playgroud)
请注意,在上面的文本文件中,我们可以在多行上自由地使用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
Run Code Online (Sandbox Code Playgroud)
如果一个语句不起作用,您可以扩展一些错误消息,例如
if err.number <> 0 then
debug.print "sql err" & err.Descripiton & "-->" vSqls
end dif
Run Code Online (Sandbox Code Playgroud)
无论如何,上面的split()和字符串读取都会让你的sql在多行上...
pho*_*bus 16
不幸的是,AFAIK你不能在传统意义上的Access中的一个命名查询下运行多个SQL语句.
您可以进行多次查询,然后将它们与VBA串联起来(DoCmd.OpenQuery
如果内存服务).
如果您愿意,也可以将一堆东西与UNION串在一起.