Как найти схему таблицы в ODBC-соединении по имени? - PullRequest
2 голосов
/ 27 марта 2019

Я использую пакет odbc для подключения к MS SQL Server

con <- dbConnect(odbc::odbc(),
                 Driver   = "ODBC Driver 13 for SQL Server",
                 Server   = "server",
                 Database = "database",
                 UID      = "user",
                 PWD      = "pass",
                 Port     = 1111)

На этом сервере много таблиц, поэтому я использую dbListTables(con) для поиска таблиц, содержащих определенную подстроку. Но как только я их найду, мне нужно выяснить, в какой схеме они находятся, чтобы иметь возможность их запрашивать. В настоящее время я делаю это вручную (ищу имя таблицы в каждой схеме), но есть ли способ получить схему всех таблиц, которые соответствуют строке?

1 Ответ

1 голос
/ 28 марта 2019

Попробуйте выполнить запрос SQL с поиском LIKE, используя встроенную таблицу метаданных INFORMATION_SCHEMA, если у вашего пользователя достаточно прав.

SELECT SCHEMA_NAME 
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME LIKE '%some string%'

Вызовите выше с помощью R odbc с параметризованным запросом при поиске по шаблону:

# PREPARED STATEMENT
strSQL <- paste("SELECT SCHEMA_NAME" ,                
                "FROM INFORMATION_SCHEMA.SCHEMATA",
                "WHERE SCHEMA_NAME LIKE ?SEARCH")

# SAFELY INTERPOLATED QUERY
query <- sqlInterpolate(conn, strSQL, SEARCH = '%some string%')

# DATA FRAME BUILD FROM RESULTSET
schema_names_df <- dbGetQuery(conn, query)
...