sql >> データベース >  >> RDS >> Sqlserver

RでSQLServerストアドプロシージャから返された複数の結果セットを読み取る方法

    RODBCには、ストアドプロシージャから複数のレコードセットを取得する機能がない場合があります。ただし、WindowsADOには NextRecordSet()があります。 方法。 RDCOMClientを使用してRにADOへのCOMインターフェイス呼び出しを行わせることを検討してください。 ライブラリ(もちろん、R for Windowsを使用していると仮定します)。 ADOの接続オブジェクトでは、RODBCで行ったのと同じ接続文字列を渡します。

    以下は、ADOの GetRows()<を使用したクエリ結果を取得します。 / a> これは、Rでネストされたリストとして変換された2次元配列を返します。

    SQL Server (ストアドプロシージャ)

    CREATE PROCEDURE MultipleResults 
    AS    
    BEGIN
        SET NOCOUNT ON;
        SELECT * FROM Table1;
        SELECT * FROM Table2;
    END
    

    R (ADOコール)

    library(RDCOMClient)
    
    conn <- COMCreate("ADODB.Connection")
    rst <- COMCreate("ADODB.Recordset")
    
    conn$Open("driver={SQL Server};server=server;database=db;trusted_connection=yes;")
    
    # FIRST QUERY RESULT
    rst$Open("MultipleResults", conn)
    dfList1 <- rst$GetRows()    
    # RETRIEVE COLUMN NAMES
    dfnames1 <- vapply(c(0:(rst[['Fields']]$Count()-1)), 
                       function(i) (rst$Fields(i)$Name()), character(1))
    
    # SECOND QUERY RESULT
    rst <- rst$NextRecordset()
    dfList2 <- rst$GetRows()    
    # RETRIEVE COLUMN NAMES
    dfnames2 <- vapply(c(0:(rst[['Fields']]$Count()-1)), 
                       function(i) (rst$Fields(i)$Name()), character(1))   
    # CLOSE OBJECTS
    rst$Close(); conn$Close()
    
    # FREE RESOURCES
    rst <-  conn <- NULL
    rm(rst, conn)
    gc()
    
    # CONVERT NESTED LISTS TO DATAFRAMES    
    dfList1 <- lapply(dfList1, function(x) setNames(data.frame(x), dfnames1))    
    df1 <- do.call(rbind, dfList1)
    
    dfList2 <- lapply(dfList2, function(x) setNames(data.frame(x), dfnames2))      
    df2 <- do.call(rbind, dfList2)
    



    1. Herokuでホストしているpgデータベースに接続できません

    2. データベースのパフォーマンス調整にはどのようなリソースがありますか?

    3. MariaDB BENCHMARK()の説明

    4. SQL:ANY / SOMEおよびALLキーワードが必要ですか?