RODBC中的varType用法

时间:2014-03-01 04:09:12

标签: sql-server r rodbc

我通过RODBC包从ODBC写入SQL Server表,特别是函数sqlSave。对于此函数,似乎默认的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,spikes20,tablename = NULL,append = TRUE,rownames = FALSE,:   column(s)as.Date'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 ......

2 个答案:

答案 0 :(得分:7)

首先,您是否真的尝试附加到名为NULL的表?

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

“可选的命名字符向量,用于提供DBMS数据类型 某些(或所有)列,如果要创建表“

您需要确保varTypes向量的名称是列名称,值是推荐的here的数据类型。所以按照他们的例子你会有:

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

答案 1 :(得分:3)

varTypes = c(spark-submit --jars /usr/share/java/postgresql-jdbc.jar --class com.examples.WordCount .. .. .. =“datetime”)适合我。