我有一个文本文件,里面有一些我要运行的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语句的文件。
答案 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查询没有用。它支持以-开头的单行注释,但不支持/ * * /中的多行注释。它支持命令行参数。
如果要使用Oracle SQL Developer或SSMS等交互式UI进行访问,则应该尝试Matthew Lock对WinSQL的引用。