繁体   English   中英

从 MS SQL 2012 odbc 连接读取表时描述符索引无效

[英]Invalid Descriptor Index when reading table from MS SQL 2012 odbc connection

我已经使用 enterprise archiect 创建了一个 MS SQL 2012 数据库,我正在使用 R 以及dbiodbc包将数据上传到该服务器。 现在,我在从我的 MS SQL 2012 服务器读取一个表时遇到问题,我需要与另一个对该表具有 FK 约束的表合并。 令我沮丧的是,我可以下载空表,但不能下载我之前附加的填充表。

这是 EA 数据库建模的图片: 在此处输入图像描述

有一个主表“unternehmen”,其中包含有关公司的信息,该表导致带有更多信息的辅助表“eigentumsverhaeltnisse”,并且一个信息链接到包含此信息标签的元表“eigentuemer”。 (我不一定需要这个,但其他地方也有类似情况)。 整个数据库(大约 100 个表)是使用企业架构师的 DDL 生成创建的。 如果需要,我可以添加更多相关信息。

所以我手动创建了元表并使用以下代码将其上传到服务器:

con <- DBI::dbConnect(odbc::odbc(),
                      Driver = "SQL Server",
                      Server = "MY server", 
                      Database = "EA_DB",
                      encoding = "latin1")
df_temp<-data.table(bezeichnung=c("Land", … , "Staat"))
DBI::dbWriteTable(con, “eigentuemer”, df_temp, append=TRUE)

有更多的代码来创建辅助表,然后我在从 SQL 服务器加载它以包含 FK 后与元表合并。 然后也使用与上面相同的代码上传。

df_temp <- code to create the other table 
df_temp_sql<-DBI::dbReadTable(con, “eigentuemer”)
df_temp<-merge(df_temp,df_temp_sql,by="bezeichnung")
some other code
DBI::dbWriteTable(con, “eigentumsverhaeltnisse“, df_temp, append=TRUE)

在此处输入图像描述

现在我无法重新加载以前附加的表,这真的很令人沮丧,而且当表为空时我可以使用相同的命令。

df_temp_sql<-DBI::dbReadTable(con, “eigentumsverhaeltnisse“,)
Error in result_fetch(res@ptr, n) : 
  nanodbc/nanodbc.cpp:2966: 07009: [Microsoft][ODBC SQL Server Driver]Ungültiger Deskriptorindex 

我假设 „ungültiger Deskriptorindex 表示无效的描述符索引。 该表存在

DBI::dbExistsTable(con, "eigentumsverhaeltnisse")

我发现了类似的问题,但我没有看到适合我的解决方案我尝试了不同的方法

df_temp_sql_4<-DBI::dbReadTable(con,DBI::SQL("eigentumsverhaeltnisse"))
df_temp_sql_5<-DBI::dbReadTable(con,"dbo.eigentumsverhaeltnisse")
df_temp_sql_6<-DBI::dbReadTable(con,DBI::SQL("dbo.eigentumsverhaeltnisse"))

我也试过 dgGetQuery 但得到同样的错误

Bin <- DBI::dbGetQuery(con, "SELECT [id], [konzernname], [eigentuemer_id], [eigentuemer_andere], 
                          [weitere_geschaeftsfelder], [konzernteil] FROM [EA_DB].[dbo].[eigentumsverhaeltnisse]")
Error in result_fetch(res@ptr, n) : 
      nanodbc/nanodbc.cpp:2966: 07009: [Microsoft][ODBC SQL Server Driver]Ungültiger Deskriptorindex

类似的问题是: Import Tables from SQL Server into R dbReadTable error in R: invalid object name dbReadTable error in R: invalid object name

编辑回答评论:我不太明白链接的问题。 我没有 varchar(max) 或 varbinary(max) 变量,是吗? 我有

PK id:bigint
   konzername:ntext
FK eigentuemer_id:bigint
   eigentuemer_andere:ntext
   weitere_geschaftsfelder:bit
   konzernteil:bit

奇怪的是,当我只包含列的子集而有些不包含时,某些DBI::dbGetQuery命令可以工作。

#Works
Bin <- DBI::dbGetQuery(con, "SELECT [id], [konzernname], [eigentuemer_andere] FROM [EA_DB].[dbo].[eigentumsverhaeltnisse]")
head(Bin)
#works as well
Bin <- DBI::dbGetQuery(con, "SELECT [id],  [eigentuemer_id] FROM [EA_DB].[dbo].[eigentumsverhaeltnisse]")
head(Bin)
#Does not work 
Bin <- DBI::dbGetQuery(con, "SELECT [id], [konzernname], [eigentuemer_andere], [eigentuemer_id] FROM [EA_DB].[dbo].[eigentumsverhaeltnisse]")
#works as well
Bin <- DBI::dbGetQuery(con, "SELECT [id],  [weitere_geschaeftsfelder] FROM [EA_DB].[dbo].[eigentumsverhaeltnisse]")
head(Bin)
#Does not work
Bin <- DBI::dbGetQuery(con, "SELECT [id], [konzernname], [eigentuemer_andere], [weitere_geschaeftsfelder] FROM [EA_DB].[dbo].[eigentumsverhaeltnisse]")

这样就可以关闭它:

与@Hearkz https://github.com/r-dbi/odbc/issues/10指出的isseu有关 这也与ntext和text变量有关,因此我需要将这些变量调整为nvarchar(veryhighnumber)而不是 nvarchar(MAX)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM