【发布时间】:2022-10-19 20:26:20
【问题描述】:
背景
我正在使用 R Studio 将 R 连接到 Microsoft SQL Server Management Studio。我正在将表格读入 R,如下所示:
library(sqldf)
library(DBI)
library(odbc)
library(data.table)
TableX <- dbGetQuery(con, statement = "SELECT * FROM [dim1].[dimA].[TableX]")
这对于某些表工作正常。但是对于大多数具有 binary ID 变量的表
发生以下情况:
TableA <- dbGetQuery(con, statement = "SELECT * FROM [dim1].[dimA].[TableA]")
Error in result_fetch(res@ptr, n) :
nanodbc/nanodbc.cpp:xxx: xxxxx: [Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index
Warning message:
In dbClearResult(rs) : Result already cleared
我发现问题是由第一列引起的,我可以这样选择:
TableA <- dbGetQuery(con, statement = "SELECT ID FROM [dim1].[dimA].[TableA]")
看起来如下:
AlwaysLearning 在 cmets 中提到这是一个反复出现的问题(1、2、3)。该查询仅在最后选择 ID 时有效:
TableA <- dbGetQuery(con, statement = "SELECT AEE, ID FROM [dim1].[dimA].[TableA]")
更新的问题
问题本质上是我如何才能在最后使用ID 变量的表中读取数据,而无需每次都指定所有表变量(因为这将是不可行的)。
可能的解决方法
我认为解决方法可能是选择 ID 作为整数:
TableA <- dbGetQuery(con, statement = "SELECT CAST(ID AS int), COL2 FROM [dim1].[dimA].[TableA]")
但是在这种情况下如何选择整个表?
我是一个 SQL 初学者,但我认为我可以通过使用类似这样的东西来解决它(来自this link):
TableA <- dbGetQuery(con, statement = "SELECT * EXCEPT(ID), SELECT CAST(ID AS int) FROM [[dim1].[dimA].[TableA]")
我选择除 ID 列之外的所有内容,然后选择最后的 ID 列。但是我建议的解决方案是不被接受的语法。
其他链接
java 的类似问题可以在 here 中找到。
【问题讨论】:
标签: r sql-server odbc sqldf