Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Błąd R DBI ODBC:nanodbc/nanodbc.cpp:3110:07009:[Microsoft][Sterownik ODBC 13 dla programu SQL Server]Nieprawidłowy indeks deskryptora

Z tym problemem też zmagam się od kilku miesięcy. Jednak natknąłem się na rozwiązanie, które również może Ci pomóc.

Krótko mówiąc, problem występuje, gdy niektóre kolumny tekstowe nie pojawiają się po kolumnach liczb całkowitych/liczbowych. Gdy kolumny nie są prawidłowo wyrównane w zapytaniu, pojawia się błąd invalid index zostanie wyrzucony i połączenie może się zawiesić. W takim razie problem polega na tym, skąd mam wiedzieć, co umieścić na końcu zapytania?

Aby to ustalić, można zwykle zbadać kolumnę za pomocą class() lub typeof() . Aby zbadać takie informacje z bazy danych, możesz użyć zapytania, takiego jak:

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

Spowoduje to zwrócenie tabeli z polem typu dla każdej kolumny w interesującym zestawie danych. Następnie możesz użyć tej tabeli jako indeksu do sortowania select() oświadczenie. Moja szczególna trudność polega na tym, że type pole w tabeli zawierało wszystkie liczby! Zauważyłem jednak, że każda kolumna z liczbą ujemną, umieszczona na końcu instrukcji select, poprawiła moje zapytanie i mogłem bez problemu wyciągnąć całą tabelę. Na przykład moje pełne rozwiązanie :

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

Jeśli chodzi o powód, dla którego tak się dzieje, nie jestem pewien i nie mam uprawnień dostępu do danych, aby kopać znacznie głębiej w moim przypadku użycia



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zamień ciąg na inny ciąg w SQL Server (T-SQL)

  2. Jak działa instrukcja IF w SQL Server

  3. Warunkowa klauzula WHERE w SQL Server

  4. Blokowanie, blokowanie, blokowanie w DBA Drzwi z blokowaniem SQL Server

  5. Generuj SQL Utwórz skrypty dla istniejących tabel za pomocą Query