2017-09-23 32 views
0

我有一個數據框有多個列超過255個字符,當我嘗試使用下面的代碼將數據框導入到sql服務器時,多列被截斷爲255個字符。使用sqlSave()將R的數據框導入SQL服務器,但將列截斷爲255字節?

myconn <- odbcDriverConnect("db_name") 
sqlSave(myconn, my_data, tablename = "Table_1" ,rownames=FALSE, append = TRUE) 

事情我試過,但沒有奏效:

我試圖與R導入數據前創建SQL中的表,但沒有奏效:

CREATE TABLE TEST_Table 
(
     [Column_1] nvarchar(max), 
     [Column_2] nvarchar(max), 
     [Column_3] nvarchar(max) 
); 

在導入數據之前,我也嘗試過如下指定varTypes

columnTypes <- list(Column_1 = "nvarchar(max)", Column_2 = "nvarchar(max)", Column_3 = "nvarchar(max)") 
sqlSave(myconn, my_data, tablename = "Table_1" ,rownames=FALSE, append = TRUE, varTypes=columnTypes) 

如果不截斷字符串,還可以將此數據框作爲表格寫入數據庫還能做什麼?

+0

唯一的成功,我曾與R將數據推送到SQL是由建設有足夠的SQL字符串巨大'INSERT'語句。 – lebelinoz

+0

@ lebelinoz-您能否提供INSERT語句的語法或示例?這對我來說是新的,值得一試。謝謝。 – Curious

+0

我會在下面給出答案,但我不確定它是否是您需要的。 – lebelinoz

回答

1

另一種解決方案是

library (RODBCext) 
channel <- odbcConnect (...) 

sqlExecute (channel, 
      "INSERT INTO Table_1 
      (Column_1, Column_2, Column_3) 
      VALUES (?,?,?)", 
      data = df [c ("Column_1", "Column_2", "Column_3")]) 
+0

@ Benjamin-這實際上工作!謝謝。 – Curious

0

我將數據從R推送到SQL的唯一成功是通過構建龐大的sql字符串的巨大INSERT語句。因此,假設我有Table_1已經在我的數據庫,我想插入一個簡單的數據幀df

Column_1 Column_2 Column_3 
-------------------------------- 
Fred  Wilma  Pebbles 
Barney Betty  Bambam 

然後我會構建R A sql串像

sql = "INSERT Table_1 (Column_1, Column_2, Column_3) 
     VALUES ('Fred', 'Wilma', 'Pebbles'), ('Barney', 'Betty', 'Bambam')" 

和運行上RODBC連接。

相關問題