2017-05-03 51 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一個功能,允許進行參數化查詢。我傾向於在任何時候需要在查詢中使用帶引號的字符串。