使用R中的dbWriteTable将数据帧写入SQL数据库表时出错

时间:2020-01-15 22:03:53

标签: sql r odbc dbi

我正在尝试从我对全局环境可用的一系列数据帧(通过R中的函数创建的数据帧)中,在SQL数据库中创建一个新表。

我能够连接到服务器:

#libraries
library(odbc)
library(dplyr)
library(DBI)

#set up a connection to the database
staging_database <- dbConnect(odbc::odbc(), "staging_db") 

#Write dataframe to table in database (table does not exist yet in SQL!)
dbWriteTable(staging_database , 'test_database', `demographics_dataframe`, row.names = FALSE)

但是,出现以下错误:

Error: <SQL> 'CREATE TABLE "test_database" (


 "field1" varchar(255),
  "field2" BIT,
  "field3" BIT,
  "field4" varchar(255),
  "field5" varchar(255),
  "field6" varchar(255),
  "field7" varchar(255),
  "field8" INT,
  "field9" INT,

这里非常无用的错误..我在这里缺少什么吗?我已遵循dbWritetable的文档。我注意到,我相信这可能是问题的一部分,因为我无法查看“ staging_db”中的任何现有表。

dbListTables(staging_database)显示了一堆元数据,但没有实际的表存在(我可以通过登录Microsoft SQL Server来验证它们是否存在)。

任何想法表示赞赏!

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的错误。就我而言,表中任何地方的特殊字符或意外符号都没有问题,因为我每次只写列的子集时都能够“一块一块地”写表。

我猜这与要写入的列数有关。一次,我最多可以写 173 列。

与其说这是限制,不如说是“CREATE TABLE”字符串的长度存在内部限制。

对我有用的解决方法是将表拆分为两组列,其中包含 ID 并稍后加入。

编辑

所以对我来说,事实是 2 列具有相同的名称。该错误确实来自“CREATE TABLE”字符串 - 无法创建具有重复列名的表。

即使在问这个问题一年后,我希望这可以帮助处理同样问题的人;)

相关问题