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

时间:2019-03-27 19:56:45

标签: r sql-server odbc rodbc r-dbi

我正在使用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 个答案:

答案 0 :(得分:1)

如果您的用户具有足够的权限,请考虑使用内置的LIKE元数据表通过INFORMATION_SCHEMA搜索运行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)

答案 1 :(得分: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"