【问题标题】:character(0) return when using RODBC使用 RODBC 时返回字符 (0)
【发布时间】:2013-07-16 06:33:14
【问题描述】:

我正在尝试将一些数据从 SQL 数据库直接导入 R。我已经毫无问题地建立了连接,但提取数据有些困难。我会尝试尽可能清楚地说明这一点,因为由于某些敏感信息,我认为我无法使其可重现。当我运行以下行时,我得到了我想要的数据:

myconn <- odbcConnect("COMPANYNAME", uid = "support", pwd = "password111?")
sqlQuery(myconn, "SELECT * FROM Metrics")

但是,当我包含要从服务器中提取的特定数据库时,我遇到了问题:

sqlQuery(myconn, "USE companyname_clientname SELECT * FROM Metrics")

其中 companyname_clientname 是数据库。我得到的不是我想要的数据,而是

character(0)

我知道引入“USE companyname_clientname”是个问题,我只是不知道为什么或如何解决它。如果有任何事情可以让您更轻松地帮助我,请告诉我,我会提供帮助。

【问题讨论】:

  • ODBC 连接将仅支持一种“最小公分母”SQL 语法。我对 sql server 不是很熟悉; FROM companyname_clientname.Metrics 会等价吗?
  • 不幸的是,它不等效。您所说的“最小公分母”SQL 语法是什么意思?
  • 我的意思是 ODBC 旨在与几乎每个 SQL 数据库一起工作,因此特定数据库的许多语言扩展将不起作用。除了普通的选择、插入、更新和删除之外,我不会指望任何东西。
  • 如果有什么能起作用,我猜它会更改您在odbcConnect 中连接的数据库的名称,但这只是猜测。
  • 是的,我会尝试通过odbcConnect

标签: sql-server r rodbc


【解决方案1】:

我遇到了同样的问题,发现有两个原因:

  1. 就像其他人指出的那样,SET NOCOUNT ON 需要位于查询的开头
  2. 仅此一项并不能解决返回字符 (0) 的问题。我发现我的 SQL 查询也有一个 PRINT 语句输出一个用于调试目的的变量。删除 PRINT 语句然后成功返回一个输出,在我的例子中是一个临时表。

希望这对其他人有所帮助!

【讨论】:

  • 对我来说这是一个存储过程中的PRINT 语句。
【解决方案2】:

如果其他人遇到此问题,character(0) 也可能是 SQL 中警告的结果,例如

Warning: Null value is eliminated by an aggregate or other SET operation.

这可以通过在 SQL 脚本顶部包含 SET ANSI_WARNINGS OFF 来解决。

【讨论】:

  • 另一个原因是USE &lt;DatabaseName&gt; 声明
  • 为我工作。谢谢。
【解决方案3】:

我有同样的问题。 character(0) 似乎是 SQL 使用 RODBC 未完成的循环的结果。

让我正确的解决方案是将set nocount on 添加到 SQL 语句的开头。如果是同样的问题,它应该可以解决问题。

【讨论】:

  • 实际上我已经尝试过了,它在某个地方的另一个帖子中。不幸的是,它没有解决我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
相关资源
最近更新 更多