我正在通过RODBC包(特别是函数sqlSave)从ODBC写入SQL Server表。似乎此函数的默认var类型为charvar(255)。我尝试使用文档中列出的varTypes参数,但失败。

这是具有类结构的名为spikes20的表,这又是我尝试通过sqlSave保存的表

sapply(spikes20, class)
Date       Day       EWW       PBR       BAC      CHTP        FB       SPY
"Date"  "factor" "numeric" "numeric" "numeric" "numeric" "numeric" "numeric"


这是尝试写入SQL Server的代码

require(RODBC)
varTypes = c(as.Date="Date")
channel <-odbcConnect("OptionsAnalytics", uid="me", pwd="you")

sqlSave (channel, spikes20, tablename = NULL, append=TRUE, rownames = FALSE, colnames = TRUE, safer = FALSE, addPK = FALSE, varTypes=varTypes )


我收到的错误消息是:

警告信息:

在sqlSave(channel,peaks20,tablename = NULL,append = TRUE,rownames = FALSE,中:
日期为'dat'的列不在'varTypes'的名称中

我试图将varType更改为:

varTypes=c(Date="Date")


然后错误消息变为:

Error in sqlSave(channel, spikes20, tablename = NULL, append = TRUE, rownames = FALSE,  :
  [RODBC] Failed exec in Update
22007 241 [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting date and/or time from character string.


任何帮助将不胜感激。看来我无法破译正确使用varTypes ...

最佳答案

首先,您是否真的要追加到名为NULL的表?

就varTypes的问题而言,以我的经验,即使varTypes参数的文档中说,我也必须为数据框中的所有变量提供映射:

“一个可选的命名字符向量,给出了要用于DBMS的数据类型
如果要创建表,则部分(或全部)列”

您需要确保varTypes向量的名称是列名称,而值是建议的here数据类型。因此,按照他们的示例,您将拥有:

tmp <- sqlColumns(channel, correctTableName)
varTypes = as.character(tmp$TYPE_NAME)
names(varTypes) = as.character(tmp$COLUMN_NAME)

08-19 23:02