我正在使用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)
搜索包含某个子字符串的表。但是一旦找到它们,我就需要发现它们所在的架构才能查询它们。我目前正在手动执行此操作(在每个模式中查找表的名称),但是有什么方法可以获取与字符串匹配的所有表的模式?
答案 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"