我正在尝试从我对全局环境可用的一系列数据帧(通过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来验证它们是否存在)。
任何想法表示赞赏!
答案 0 :(得分:0)
我最近遇到了同样的错误。就我而言,表中任何地方的特殊字符或意外符号都没有问题,因为我每次只写列的子集时都能够“一块一块地”写表。
我猜这与要写入的列数有关。一次,我最多可以写 173 列。
与其说这是限制,不如说是“CREATE TABLE”字符串的长度存在内部限制。
对我有用的解决方法是将表拆分为两组列,其中包含 ID 并稍后加入。
所以对我来说,事实是 2 列具有相同的名称。该错误确实来自“CREATE TABLE”字符串 - 无法创建具有重复列名的表。
即使在问这个问题一年后,我希望这可以帮助处理同样问题的人;)