我继续阅读DBI/ODBC
比RODBC
,所以我尝试如下:
require(DBI);require(odbc)
con <- DBI::dbConnect(odbc::odbc(), dsn = 'SQLSERVER1', database = 'AcumaticaDB')
我可以成功连接到 DSN,但查询如下:
rs <- dbGetQuery(con, "SELECT * FROM inventoryitem")
dbFetch(rs)
给我以下错误:
result_fetch(res@ptr, n, ...) 中的错误:
nanodbc/nanodbc.cpp:3110: 07009: [Microsoft][SQL Server 的 ODBC 驱动程序 13]描述符索引无效
我究竟做错了什么 ?
请不RODBC
解决方案。
谢谢!
我很高兴很久以前就有人提出这个问题,但我已经找到了解决方法。上面的答案让我大致了解了这一点。我遇到的问题是 nvarchar 类型的列,其架构表中的 CHARACTER_MAXIMUM_LENGTH 为 -1,我理解这意味着它们是可能的最大长度。
我的解决方案是在 INFORMATION_SCHEMA.COLUMNS 表中查找相关表,然后适当地重新排列我的字段:
require(DBI);require(odbc)
library(tidyverse)
con <- DBI::dbConnect(odbc::odbc(), dsn = 'SQLSERVER1', database = 'AcumaticaDB')
column.types <- dbGetQuery(con, "SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='inventoryitem'")
ct <- column.types %>%
mutate(cml = case_when(
is.na(CHARACTER_MAXIMUM_LENGTH) ~ 10,
CHARACTER_MAXIMUM_LENGTH == -1 ~ 100000,
TRUE ~ as.double(CHARACTER_MAXIMUM_LENGTH)
)
) %>%
arrange(cml) %>%
pull(COLUMN_NAME)
fields <- paste(ct, collapse=", ")
query <- paste("SELECT", fields, "FROM inventoryitems")
tbl(con, sql(query)) %>% head(5)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)