2017-10-06 30 views
1

DBIパッケージとodbcパッケージを使用してSQL Serverデータベースに接続しています。私はfield.types引数で指定された列型のテーブルを作成しようとしています。何らかの理由でこれが機能していないため、Rは書き込み時に独自のデータ型を選択します。SQL ServerデータベースのR DBIパッケージからdbWriteTableを使用するとFieldTypeが機能しない

再現性の例:

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 
    

    私の質問で "tableNameの" と呼ばれるテーブル両方の列のデータベースの列の種類はvarchar(50)になります。

  2. field.types引数を他の例で正しく使用するにはどうすればよいですか?

、「種類が」私は何を私が知りたいのを使用する必要がありますされています。私は(それは問題かもしれないので、Rは、大文字と小文字が区別されます)「INT」または「整数」または「INT」が必要なのでしょうか?そして、これらのデータ型のリストはどこにありますか?私はdbDataTypeを使用しようとしましたが、この関数が返す型を使用するとどちらも機能しません。それとも別のことをやっているのですか?

ご協力いただきありがとうございます。

答えて

1

Iは、(slighly変性)あなたの例を試し:

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から)受け入れられる:

  • 整数
  • 数値
  • 論理ブール値のため
  • POSIXctが
  • POSIXltはの
  • リストをタイムスタンプタイムスタンプ
  • 日(警告で、文字としてバインド)
  • NA
  • 文字
  • 因子(いくつかのバックエンドは、整数を返すことがあります。) blobの未処理(SQL NULL値のNULL項目を含む)
  • blob :: blob型のオブジェクト
+0

あなたはそうです。私はこれを再試行し、今それは動作します。非常に奇妙な。私はここで何が起こったのか分かりませんが、今はうまくいきます。どうも! – Willem

関連する問題