我可以在数据库中插入一行,R中的值按如下方式
#connect
conn = odbcDriverConnect("Driver=SQL Server; Server=MyServerName; Database=MyDBName; Uid=IAMTubby; Pwd=abcd;")
#insert
myquery = "insert into MyTableName values('1234','M','6','3');"
res = sqlQuery(conn, myquery)
但是,我想将我的数据框的第一行直接插入到sql中,而不是将它们分成值。我怎样才能做到这一点? 比如说,我的数据框如下所示,并且与数据库具有相同的模式
> df[1,]
col1 col2 col3 col4
1 1234 M 6 3
编辑:我尝试了sqlSave,但是当我执行以下代码时,我的RStudio崩溃了。我哪里错了?
SQL-Server中的表创建代码
#table creation
use DBName
CREATE TABLE Persons
(
col1 varchar(255),
col2 varchar(255),
col3 varchar(255),
);
R胶代码
#library
library("RODBC")
#connect
conn = odbcDriverConnect("Driver=SQL Server; Server=MyServer; Database=DBName; Uid=username; Pwd=abcd;")
#inserting a data frame
df = NULL
df$col1 = '1'
df$col2 = '2'
df$col3 = '3'
df = as.data.frame(df)
sqlSave(conn, df[1,], tablename = "Persons", append = TRUE)
答案 0 :(得分:3)
选项1:您可以像这样动态创建查询:
df = data.frame(col1 = 1234, col2 = "M", col3 = 6, col4 = 3)
myquery = paste0("insert into MyTableName values(", paste0("'", df[1,], "'", collapse = ", "), ");")
这将在对象myquery中保存以下字符串:
"insert into MyTableName values('1234', '1', '6', '3');"
选项2:
正如@nrussell所述,您还应该能够使用RODBC包中的sqlSave函数:
sqlSave(conn, df[1,], tablename = "MyTableName", append = TRUE)