sql >> Databáze >  >> RDS >> Sqlserver

Chyba R DBI ODBC:nanodbc/nanodbc.cpp:3110:07009:[Microsoft][Ovladač ODBC 13 pro SQL Server]Neplatný index deskriptoru

S tímto problémem se také potýkám několik měsíců. Narazil jsem však na řešení, které může pomoci i vám.

Stručně řečeno, k problému dochází, když se určité textové sloupce nezobrazují po celočíselných nebo číselných sloupcích. Pokud nejsou sloupce v dotazu správně zarovnány, zobrazí se chyba invalid index je vyhozen a vaše připojení může zamrznout. Otázkou tedy je, jak zjistím, co mám uvést na konec dotazu?

Chcete-li to zjistit, lze obvykle prozkoumat sloupec pomocí class() nebo typeof() . K prozkoumání takových informací z databáze můžete použít dotaz jako:

dbColumnInfo(dbSendQuery(con, "SELECT * from schema.table")) # You may not require the schema part...

Tím se vrátí tabulka s polem typu pro každý sloupec v souboru dat, který vás zajímá. Tuto tabulku pak můžete použít jako index k řazení select() prohlášení. Můj konkrétní problém je v tom, že type pole v tabulce byla všechna čísla! Všiml jsem si však, že každý sloupec se záporným číslem, když byl umístěn na konec příkazu select, opravil můj dotaz a mohl jsem v pohodě stáhnout celou tabulku. Například moje úplné řešení :

# 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)))

Pokud jde o důvod, proč k tomu dochází, nejsem si jistý a nemám oprávnění pro přístup k datům, abych se ve svém případu použití dostal mnohem hlouběji



  1. Proaktivní kontroly stavu serveru SQL Server, část 5:Statistika čekání

  2. Proč se učit Cassandru s Hadoopem?

  3. Jak vytvořit a používat dočasnou tabulku v uložené proceduře Oracle?

  4. Optimalizace dotazu Postgres (vynucení skenování indexu)