2017-05-03 46 views
0

对不起提前拉从多个表的列名,由于是新Rstudio ...如何,使用R

有两个部分对这个问题:

1)我有,有一个大型数据库近6000张桌子。许多这些表格中没有数据。有没有一个代码使用R来只拉取有数据的表名列表?

我知道如何把所有表名的列表,以及如何使用下面的代码提取特定表数据..

test<-odbcDriverConnect('driver={SQL Server};server=(SERVER);database=(DB_Name);trusted_connection=true') 
rest<-sqlQuery(test,'select*from information_schema.tables') 
Table1<-sqlFetch(test, "PROPERTY") 

以上是我用来访问数据库和表的代码。

  • “测试”是
  • “休息”的连接显示了5,803台的名字..这一个被称为“财产”
  • “表1”被简单地拉动命名的表的一个“名单属性”。

我期待让“休息”只显示有数据的数据表。

2)我的最终目标,这导致了第二个问题,是创建一个表,其中显示从该数据库中的#1列,然后列2,3,4等每个表的列表会...包括每个表中包含的每个列标题。任何想法如何做到这一点?

非常感谢!

回答

0

Tables对象返回的数据帧给所有在数据库中的表,并有多少行是每个表中。作为一个条件,它要求所选的表至少有一条记录。这可能是获取非空表的列表的最快方式。我把查询到从https://stackoverflow.com/a/14163881/1017276

我唯一的预约获取有关该查询的是,它不给模式名称,它可能有在不同的模式相同名称的表。所以这可能一次只能在一个模式中正常工作。

library(RODBCext) 

Tables <- 
    sqlExecute(
    channel = test, 
    query = "SELECT T.name TableName, I.rows Records 
      FROM sysobjects t, sysindexes i 
      WHERE T.xtype = ? AND I.id = T.id AND I.indid IN (0,1) AND I.rows > 0 
      ORDER BY TableName;", 
    data = list(xtype = "U"), 
    fetch = TRUE, 
    stringsAsFactors = FALSE 
) 

下一部分使用您在上面找到的表格,然后从每个表格获取列信息。最后,它使单个数据框与所有的列名进行比较。

Columns <- 
    lapply(Tables$TableName, 
     function(x) sqlColumns(test, x)) 
Columns <- do.call("rbind", Columns) 

sqlColumnsRODBC功能。

sqlExecuteRODBCext一个功能,允许进行参数化查询。我倾向于在任何时候需要在查询中使用带引号的字符串。