Я создал базу данных MS SQL 2012, используя архитектуру предприятия, и сейчас я загружаю данные на этот сервер, используя R и пакеты dbi
и odbc
. Теперь у меня проблема с чтением таблицы из моего сервера 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
Подобные вопросы: Импорт таблиц из SQL Сервер в R Ошибка dbReadTable в R: неверное имя объекта Ошибка dbReadTable в R: неверный объект имя
Изменить, чтобы ответить на комментарий: Я не совсем понимаю вопрос по ссылке. У меня нет переменных 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]")