R RODBC 显示所有表
R RODBC Show all tables
我正在尝试使用 R/RODBC 对 MSSQL 2008 R2 数据库的结构进行分类。我已经设置了一个 DSN,通过 R 连接并使用了 sqlTables()
命令,但这只是获取了 'system databases' 信息。
library(RODBC)
conn1 <- odbcConnect('my_dsn')
sqlTables(conn1)
但是如果我这样做:
library(RODBC)
conn1 <- odbcConnect('my_dsn')
sqlQuery('USE my_db_1')
sqlTables(conn1)
我得到了与 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]
)
(出于保密原因,我无法显示任何输出,但它会产生正确的结果。)当然,在您的情况下,您可能想做类似
的事情
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)
我正在尝试使用 R/RODBC 对 MSSQL 2008 R2 数据库的结构进行分类。我已经设置了一个 DSN,通过 R 连接并使用了 sqlTables()
命令,但这只是获取了 'system databases' 信息。
library(RODBC)
conn1 <- odbcConnect('my_dsn')
sqlTables(conn1)
但是如果我这样做:
library(RODBC)
conn1 <- odbcConnect('my_dsn')
sqlQuery('USE my_db_1')
sqlTables(conn1)
我得到了与 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]
)
(出于保密原因,我无法显示任何输出,但它会产生正确的结果。)当然,在您的情况下,您可能想做类似
的事情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)