Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да чета множество набори от резултати, върнати от съхранена процедура на SQL Server в R

RODBC може да няма функция за извличане на множество набори от записи от съхранена процедура. Windows ADO обаче има NextRecordSet() метод. Помислете дали да накарате R да направи извикване на COM интерфейс към ADO с помощта на RDCOMClient библиотека (разбира се, ако използвате R за Windows). В обекта за свързване на ADO предавате същия низ за свързване, както в RODBC.

По-долу извлича резултати от заявка с GetRows()<на ADO /a> който връща двуизмерен масив, преведен като вложени списъци в R.

SQL сървър (Съхранена процедура)

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

R (ADO Call)

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Създайте вход

  2. Вземете всичко за всеки служител?

  3. Как да намерите местоположението на файла по подразбиране за файлове с данни и регистрационни файлове в SQL Server

  4. Замяна на знаци в низ въз основа на редове в таблица sql

  5. Най-добрият начин за съхраняване на тримесечие и година в SQL Server?