楼主: 丁兆海4
6376 4

[程序分享] R语言 RODBC包 sqlSave函数 [推广有奖]

  • 5关注
  • 3粉丝

已卖:1174份资源

硕士生

29%

还不是VIP/贵宾

-

威望
0
论坛币
2204 个
通用积分
10.6811
学术水平
6 点
热心指数
11 点
信用等级
5 点
经验
5651 点
帖子
67
精华
0
在线时间
204 小时
注册时间
2014-9-20
最后登录
2025-12-21

楼主
丁兆海4 在职认证  学生认证  发表于 2017-5-12 13:21:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
2017年5月11号下午到2017年5月12号上午,这个函数把我折磨地精疲力尽。不过,最终还是满足了软件开发的需求。首先,RODBC之sqlSave函数调试记录:
        1、rownames算在内,会作为一列;
        2、字符会为varchar(255),数值会为float;
        3、SQLServer中,datatime类型,默认显示格式为“2017-05-01 12:30:00.000”,在R中,以字符串型,as.Date型,
              as.POSIXct型存入SQLServer中预定义的表,效果一样。

其次,说一下在尝试的过程中遇到的困难:
        1 未在数据库中建立数据表,直接存储,生成错误。
        错误原因:R数据框里含有非数值非字符的日期时间类型,在默认的情况下,只可以存储数值和字符型,在数据库中生成对应         名称的数据表,里面的字段类型为float和varchar(255),所以,在尝试时,去掉日期时间就可以了。
        2 指定存储rownames和指定主键。
        参数说明:如果不想存储rownames,则指定参数rownames=FALSE,也就不牵扯主外键的问题。
最后,说一下自己的应用实例:
        第一步:在SQLServer中建数据表T_ConvergenceBoxCVS,需要指定清楚字段的数据类型,int、datatime等。
  1. use [PS.42];
  2. create table T_ConvergenceBoxCVS
  3. (DeviceId int not null,
  4. DataTime datetime not null,
  5. CVS float
  6. );
复制代码
       第二步:在R里生成一个实例的数据框T_ConvergenceBoxCVS,里面指定好数据类型。
  1. T_ConvergenceBoxCVS <- data.frame(
  2.   DeviceId = c(5788,5811),   # 在data.frame内部使用等号赋值运算符
  3.   DataTime = c(as.POSIXct("2017-05-01"),as.POSIXct("2017-05-01")),
  4.   CVS = c(2.123, 4.1243),stringsAsFactors = FALSE)
复制代码
       第三步:在R中使用sqlSave函数将R数据框T_ConvergenceBoxCVS写入到新建的数据库表中,因为数据库中已经新建了数据库表,所以tablename="T_ConvergenceBoxCVS",append=TRUE即可。
  1. sqlSave(dbhandlelocal,  # 创建的数据连接
  2.         T_ConvergenceBoxCVS, #R数据框名称
  3.         tablename = "T_ConvergenceBoxCVS", # 数据库表名
  4.         rownames = FALSE, # 不存储数据框的行名
  5.         append = TRUE) # 添加新记录到数据库表中
复制代码
       希望可以给大家一个参考,好的参考。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:RODBC包 RODBC Save AVE Rod R语言 RODBC sqlSave sqlserver

已有 1 人评分学术水平 热心指数 收起 理由
ryoeng + 1 + 1 对论坛有贡献

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

沙发
xialichong 发表于 2018-2-6 20:23:56
感谢楼主,请问如何在你的数据链接中,选择不同的database名?

藤椅
丁兆海4 在职认证  学生认证  发表于 2018-2-10 08:28:09
xialichong 发表于 2018-2-6 20:23
感谢楼主,请问如何在你的数据链接中,选择不同的database名?
你好,关于这个问题,需要在具体的SQL语句中指定,如果数据库较多,可以使用一个循环条件。例如:
select * from [database].[datatable] where ....,其中[database]就是数据库名称,我使用的RODBC链接,只能精确到数据库链接,精确不到数据库。
请查收。

板凳
tanxx0817 发表于 2018-5-29 22:33:21
大神,我也碰到这个问题,事先建好表,但是一直报这个错误,请问,还有什么其他的原因吗?我打印出来的 sql 语句,发现 insert into 的字段名称居然重复了,类似于如下代码,请问是什么原因?谢谢!
insert into table_a(rownames, datadate, datatype,col1,col2,rownames, datadate, datatype,col1,col2) values (?,?,?,?,?)
binding:rownames datatype 12,colsize 255
binding:datadate datatype 12,colsize 255
binding:datatype datatype 12,colsize 255
binding:col1 datatype 12,colsize 255
binding:col2 datatype 12,colsize 255
binding:rownames datatype 12,colsize 255
binding:datadate datatype 12,colsize 255
binding:datatype datatype 12,colsize 255
binding:col1 datatype 12,colsize 255
binding:col2 datatype 12,colsize 255

报纸
丁兆海4 在职认证  学生认证  发表于 2018-6-6 08:50:04
tanxx0817 发表于 2018-5-29 22:33
大神,我也碰到这个问题,事先建好表,但是一直报这个错误,请问,还有什么其他的原因吗?我打印出来的 sql ...
在插入数据的时候,数据框中的每一字段类型没问题,还需要注意不要将数据框的行号插入,通常来说,不会出现很明显的错误。
如果,还有错误。就去Use R!(群号:538911602),里面大神挺多的。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 17:45