R语言 RODBC包 sqlSave函数 SQL Server数据库

          在使用R语言将生成的中间结果存入数据库时,使用RODBC包里的sqlSave函数时,遇到非常多的小错误,而且网络上的教程可以说都是血的教训,哪有经验。

这一片算是一片经验吧!

        首先,说一下RODBC 之 sqlSave函数调试记录:

        1 rownames算在内,会作为一行;

        2 字符会为varchar(255),数值为float;

        3 SQL Server中datatime类型,默认显示格式为“2017-05-01 12:30:00.000”。从R里以数据框的形式向数据库表中写日期时间类型的数据,在R数据框中,以何种形式存储日  期时间类型都不要紧——字符型、as.Date、as.POSIXct,都一样。

        然后,记录一下,调试中间产生的错误;

         1 未在数据库中新建数据库表,直接按照给的example将数据框插入数据库表,结果出现错误。

        错误原因:数据框中含有日期时间类型as.POSIXct,对应的数据库不能转换;

         2 rownames参数等于FALSE,则数据框的行名不默认插入数据库表中,也就不牵扯主外键;

        最后,说一下自己的真是例子:

        第一步,在SQL Server数据库中新建表T_ConvergenceBoxCVS,指定字段名称及数据类型

 use [PS.42];

create table T_ConvergenceBoxCVS
(DeviceId int not null,
DataTime datetime not null,
CVS float
)
        第二步,在R中生成实例数据框T_ConvergenceBoxCVS,指定数据类型

T_ConvergenceBoxCVS <- data.frame(
  DeviceId = c(5788,5811),   # 在data.frame内部使用等号赋值运算符
  DataTime = c(as.POSIXct("2017-05-01"),as.POSIXct("2017-05-01")),
  CVS = c(2.123, 4.1243),stringsAsFactors = FALSE)
        第三步,利用RODBC包中的sqlSave函数将R数据框数据插入到数据库中的新建表里,由于不想将数据框的行名称加入,所以指定rownames=FLASE,由于数据表已经存在于数据库中,所以append=TRUE即可。


sqlSave(dbhandlelocal, 

        T_ConvergenceBoxCVS, 
        tablename = "T_ConvergenceBoxCVS", 
        rownames = FALSE,
        append = TRUE)
可以无限次写入,不必担心参数问题。









你可能感兴趣的:(数据分析(R软件),数据业务化)