我正在通过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)