如何按名称在 ODBC 连接中查找表的架构?

Posted

技术标签:

【中文标题】如何按名称在 ODBC 连接中查找表的架构?【英文标题】:How do I find the schema of a table in an ODBC connection by name? 【发布时间】:2019-03-27 19:56:45 【问题描述】:

我正在使用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】:

如果您的用户具有足够的权限,请考虑使用内置的 INFORMATION_SCHEMA 元数据表运行带有 LIKE 搜索的 SQL 查询。

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)

【讨论】:

【参考方案2】:

我找到了使用 RODBC 包的解决方法:

library('RODBC')
# First connect to the DB
dbconn <- odbcDriverConnect("driver = ODBC Driver xx for SQL Server;
                            server = server;
                            database = database;
                            uid = username;
                            pwd = password")
# Now fetch the DB tables
sqlTables(dbconn)

对于我的特定数据库,我得到:

names(sqlTables(dbconn)
[1] "TABLE_CAT"   "TABLE_SCHEM" "TABLE_NAME"  "TABLE_TYPE"  "REMARKS"    

【讨论】:

好东西;这个工作有什么要求? (在其他地方读到一些链表是专有的并且没有索引,想知道这是否甚至可以在这里工作......或者它是否取决于索引/ some_schema_criteria / 特定的 SQL 类型(查看使用 ODBC 连接)谢谢

以上是关于如何按名称在 ODBC 连接中查找表的架构?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 中查找模式名称?当您使用只读用户在 sql 会话中连接时

如何设置网站数据库,数据源odbc的连接

如何在 ms-access VBA 中检索表的 odbc 数据库名称

MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢

安装 mysql odbc连接器

asp用odbc连接sqlserver数据库代码怎么写