【问题标题】:Error writing dataframe to SQL database table using dbWriteTable in R在 R 中使用 dbWriteTable 将数据帧写入 SQL 数据库表时出错
【发布时间】:2020-05-02 17:45:45
【问题描述】:

我正在尝试从一系列可供全局环境使用的数据框(通过 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 来验证它们是否存在)。

【问题讨论】:

  • 假设您的demographics_dataframe 是您要写入数据库的数据框,它不应该有向后的刻度吗?
  • 这就是它在 R 中自动完成数据帧的方式。没有这些引号,它会给我一个意外的符号错误。
  • 这很奇怪,如果没有关于 db 连接的信息,除了可能值得检查您对 db 的写访问权限以及 demographics_dataframe 是否是 data.frame 或可以强制为一个?

标签: sql r odbc dbi


【解决方案1】:

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

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

与其认为这是限制,我会说“CREATE TABLE”字符串的长度存在内部限制。

对我有用的解决方法是将表拆分为两组列,其中包含 ID,然后再将它们连接起来。

编辑

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

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

【讨论】:

    猜你喜欢
    • 2018-03-06
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2018-03-12
    • 2019-09-01
    • 1970-01-01
    相关资源
    最近更新 更多