2015-09-25 76 views
2

數據庫我能夠將行插入數據庫中,值按值中的R如下插入從數據幀的數據的行直接向中的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-服務器

表創建代碼

#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) 
+3

你有沒有看着['RODBC :: sqlSave'] (http://www.inside-r.org/packages/cran/RODBC/docs/sqlUpdate)?看起來你可以通過在這個函數中設置'append = TRUE'來完成這個任務。 – nrussell

+0

嘗試在'sqlSave()'命令中添加參數'rownames = FALSE'。 – Parfait

回答

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) 
+0

你已經理解我的問題。但不是附加df [1,1],df [1,2]等並創建一個字符串,我想知道是否有辦法直接將df [1,]寫入數據庫。如果我的數據庫中的表具有與數據框df相同的模式(4列,col1,col2,col3,col4),就像插入MyTableName df [1,]一樣 – PepperBoy