2017-10-06 61 views
1

我使用DBI包和odbc包連接到SQL Server數據庫。我正在嘗試編寫一個表格,其中列出了field.types參數指定的列類型。出於某種原因,這不起作用,R在編寫時選擇自己的數據類型。從SQL Server數據庫的R DBI包中使用dbWriteTable時,Field.types不起作用

重複的例子:

table <- data.frame(
    col1 = 1:2, 
    col2 = c("a", "b") 
) 

con <- dbConnect(
    odbc::odbc(), 
    dsn = "dsn", 
    UID = login, 
    PWD = password, 
    Port = 1433 
) 

dbWriteTable(
    conn = con, 
    value = table, 
    name = "tableName", 
    row.names = FALSE, 
    field.types = c(
    col1 = "varchar(50)", 
    col2 = "varchar(50)" 
) 
) 

結果:

  1. 我怎樣才能更正我上面的例子:一個名爲 「表名」 的列

    [col1] [int] NULL, 
    [col2] [varchar](255) NULL 
    

    我問表,這樣兩列的數據庫上的列類型將爲varchar(50)

  2. 如何正確使用其他示例的field.types參數?

我想知道的是,什麼是「類型」我應該用:我需要「內部」或「整數」或「INT」(R是大小寫敏感的,所以可能重要)?然後,我在哪裏可以找到這些數據類型的列表?我曾嘗試使用dbDataType,但使用此函數返回的類型也不起作用。還是我在做其他事情?

在此先感謝您的幫助。

回答

1

我想你的示例(性能稍微修改):

lybrary(RMySQL) 
lybrary(lubridate) 

conn=dbConnect(MySQL(), user='root', password='', dbname='DB', host='localhost') 

table <- data.frame(
    col1 = 1:2, 
    col2 = c("a", "b"), 
    col3 = c(now(), now()+seconds(1)) 
) 

dbWriteTable(
    conn = conn, 
    name='test_DB', 
    value = table, 
    row.names = FALSE, 
    field.types = c(
     col1 = "varchar(50)", 
     col2 = "varchar(50)", 
     col3 = 'timestamp' 
) 
) 

和它順利工作:declare_data_typed_dbWriteTable

至少以下數據類型被接受(從DBI documentation):

  • 整數
  • numeric
  • logical爲布爾值(某些後端可能返回的整數)
  • NA
  • 字符
  • 因子(綁定爲字符,與警告)
  • 日期
  • POSIXct時間戳
  • POSIXlt時間戳的
  • 列表原始爲blob(對於NULL NULL值,爲NULL條目)
  • blob :: blob類型的對象
+0

你說得對。我重試了這個,現在它可以工作。很奇怪。我不確定這裏發生了什麼,但我很高興它現在可以工作。謝謝! – Willem

相關問題