如何在Access'查询编辑器中执行多个SQL语句?

时间:2009-12-03 08:53:02

标签: ms-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语句 文件输入/打开/取消访问。

谢谢/ Rene

编辑插入语句被用作一个例子,我意识到它们并不完美,因为它们都会转到同一个表,这样的事情显然可以通过一个语句以某种方式解决有联盟或什么的。在我试图解决的实际情况中,该文件不仅包含插入语句,还包含创建表语句和插入具有不同基础表的语句。所以我希望(并且仍然希望)有一些类似于我心爱的SQL * Plus for Oracle,它可以执行包含各种SQL语句的文件。

6 个答案:

答案 0 :(得分: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');

请注意,在上面的文本文件中,我们可以在多行上自由地使用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在多行上...

答案 1 :(得分:15)

不幸的是,AFAIK你不能在传统意义上的Access中的一个命名查询下运行多个SQL语句。

你可以进行多次查询,然后将它们与VBA(如果内存服务的话为DoCmd.OpenQuery)串在一起。

如果愿意,你也可以将一堆东西与UNION串在一起。

答案 2 :(得分:0)

您可能会发现使用第三方程序更好地将查询输入Access,例如WinSQL我认为从内存WinSQL supports multiple queries通过它的批处理功能。

我最终发现在perl中编写程序更容易通过ODBC将批量INSERTS写入Access。您可以使用vbscript或任何支持ODBC的语言。

然后,您可以执行任何您喜欢的操作,并拥有自己的复杂逻辑来处理导入。

答案 3 :(得分:0)

最好只在顶行创建一个字段名称的XLSX文件。 手动或使用Mockaroo创建它。 将其导出到Excel(或CSV),然后使用新数据源将其导入Access - &gt;来自档案

恕我直言,这是在Access中执行此操作的最佳和最高效的方式。

答案 4 :(得分:0)

创建这样的宏

  

选项比较数据库

     

Sub a()

     

DoCmd.RunSQL“从* TABLENAME中的条件中删除*”

     

DoCmd.RunSQL“从* TABLENAME中的条件中删除*”

     

结束子

答案 5 :(得分:0)

“我希望(并且仍然希望)有一种我喜欢的Oracle SQL * Plus,它可以执行带有各种SQL语句的文件。”

如果您正在寻找一个可以导入文件并在其中执行SQL语句的简单程序,请查看DBWConsole(免费软件)。我用它来处理DDL脚本(表模式)以及动作查询。它不返回数据集,因此对SELECT查询没有用。它支持以-开头的单行注释,但不支持/ * * /中的多行注释。它支持命令行参数。

enter image description here

如果要使用Oracle SQL Developer或SSMS等交互式UI进行访问,则应该尝试Matthew Lock对WinSQL的引用。