2013-03-09 39 views
1

在R中,每次向sqlQuery传递带有多个语句的查询时都会收到错误。 例如,RODBC - 在一个sqlQuery()调用中的多个语句

sqlQuery(ch, 'DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2;') 

产生错误

[1] "42000 1064 [MySQL][ODBC 5.1 Driver][mysqld-5.5.27]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE IF EXISTS t2' at line 1" 
[2] "[RODBC] ERROR: Could not SQLExecDirect 'DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2;'" 

我在做什么错?

+0

这是一个与您使用SQL语法相关的问题,而不是'R'。添加'sql'标签来适当地引起对这个问题的关注。 – 2013-03-09 16:43:55

+0

我试着在MySQL Workbench中执行语句,它运行良好。 – gillenpj 2013-03-09 16:45:48

+0

也许你需要跳过分号字符(我不记得它是否是R中的特殊字符)。尝试''DROP TABLE IF EXISTS t1 \; DROP TABLE IF EXISTS t2 \;'' – 2013-03-09 16:47:07

回答

0

首先,从R中尝试一条语句Drop table if exists t1;对于我(我正在使用Access数据库进行测试),这表示ODBC在我的环境中不支持if exists。在MySQL Workbench中测试不是一个公平的比较;但是,您的构造可能会使用RMySQL包提供的函数。

ODBC在许多方面是不同的,所以为了测试是否可行,我通常使用Access通过ODBC连接到数据库并使用SQL设计器。以下在这里不起作用:

CREATE TABLE b (id INT PRIMARY KEY); 
DROP TABLE b; 

作为单独的语句,它工作正常。

+0

我只用了一条语句drop-if语句,并且它工作正常。所以ODBC似乎在我的环境中支持这个构造。我想知道是否RODBC软件包不支持多个sql语句,尽管StackOverflow上的其他问题表明了其他问题。 – gillenpj 2013-03-10 21:35:22