我正在尝试使用R/RODBC编目MSSQL 2008 R2数据库的结构.我已经设置了一个DSN,通过R连接并使用了sqlTables()命令,但这只是获取'系统数据库'信息.
library(RODBC)
conn1 <- odbcConnect('my_dsn')
sqlTables(conn1)
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做:
library(RODBC)
conn1 <- odbcConnect('my_dsn')
sqlQuery('USE my_db_1')
sqlTables(conn1)
Run Code Online (Sandbox Code Playgroud)
我得到了与my_db_1数据库相关联的表.有没有办法查看所有数据库和表,而无需为每个数据库和表单独输入单独的USE语句?
可能有也可能没有更惯用的方法来直接在 SQL 中执行此操作,但是我们可以USE xyz;通过从中获取数据库列表master..sysdatabases并传递这些数据来将所有数据库中所有表的数据集拼凑在一起(比重复语句更编程)作为catalog论据sqlTables- 例如
library(RODBC)
library(DBI)
##
tcon <- RODBC::odbcConnect(
dsn = "my_dsn",
uid = "my_uid",
pwd = "my_pwd"
)
##
db_list <- RODBC::sqlQuery(
channel = tcon,
query = "SELECT name FROM master..sysdatabases")
##
R> RODBC::sqlTables(
channel = tcon,
catalog = db_list[14, 1]
)
Run Code Online (Sandbox Code Playgroud)
(出于保密原因,我无法显示任何输出,但它会产生正确的结果。)当然,在您的情况下,您可能想要做类似的事情
all_metadata <- lapply(db_list$name, function(DB) {
RODBC::sqlTables(
channel = tcon,
catalog = DB
)
})
# or some more efficient variant of data.table::rbindlist...
meta_df <- do.call("rbind", all_metadata)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10102 次 |
| 最近记录: |