Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

R DBI ODBC error:nanodbc/nanodbc.cpp:3110:07009:[Microsoft][ODBC Driver 13 for SQL Server]Invalid Descriptor Index


Eu também tenho lutado com este problema por vários meses. No entanto, encontrei uma solução que pode ajudá-lo também.

Em poucas palavras, o problema ocorre quando determinadas colunas de texto não aparecem após colunas inteiras/numéricas. Quando as colunas não estão alinhadas corretamente na consulta, um erro de invalid index é lançado e sua conexão pode congelar. O problema então é:como saber o que colocar no final da minha consulta?

Para determinar isso, pode-se normalmente examinar uma coluna usando class() ou typeof() . Para examinar essas informações do banco de dados, você pode usar uma consulta como:
dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...

Isso retornará uma tabela com um campo de tipo para cada coluna no conjunto de dados de interesse. Você pode então usar esta tabela como um índice para classificar o select() demonstração. Minha dificuldade particular é que o type campo na tabela era todos os números! No entanto, notei que todas as colunas com um número negativo, quando colocadas no final da instrução select, corrigiam minha consulta e eu conseguia puxar a tabela inteira muito bem. Por exemplo, minha solução completa :
# Create my index of column types (ref to the current order)
index <- dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table"))
index$type <- as.integer(index$type) # B/c they are + and - numbers!

# Create the ref to the table
mySQLTbl <- tbl(con, in_schema("schema", "tablename"))

# Use the select statement to put all the + numbered columns first!
mySQLTbl %>%
  select(c(which(index$type>=0),
                 which(index$type<0)))

Quanto ao motivo pelo qual isso ocorre, não tenho certeza e não tenho privilégios de acesso a dados para aprofundar muito mais meu caso de uso