如何按名称在 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 会话中连接时
如何在 ms-access VBA 中检索表的 odbc 数据库名称