通过名称在ODBC连接中如何找到表的模式?

3
我正在使用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) 来搜索包含特定子字符串的表。但是一旦找到它们,我需要发现它们属于哪个模式以便能够查询它们。我目前正在手动执行此操作(在每个模式中查找表的名称),但是否有任何方法可以获取与字符串匹配的所有表的模式?

2个回答

2
考虑使用内置的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)

0
我找到了一个使用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"    

很棒的东西;这个工作需要什么要求?(在其他地方阅读到一些链接列表表是专有的且未索引,想知道这是否适用于此处...或者它是否取决于索引/某些模式标准/特定的SQL类型(考虑使用ODBC连接)谢谢。) - Jonny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接