Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara membaca beberapa set hasil yang dikembalikan dari prosedur tersimpan SQL Server di R

RODBC mungkin tidak memiliki fitur untuk mengambil beberapa recordset dari prosedur tersimpan. Namun, Windows ADO memiliki NextRecordSet() metode. Pertimbangkan agar R melakukan panggilan antarmuka COM ke ADO menggunakan RDCOMClient library (dengan asumsi tentu saja Anda menggunakan R untuk Windows). Di objek koneksi ADO, Anda meneruskan string koneksi yang sama seperti yang Anda lakukan di RODBC.

Di bawah ini mengambil hasil kueri dengan GetRows() yang mengembalikan larik dua dimensi yang diterjemahkan sebagai daftar bersarang di R.

SQL Server (Proc Tersimpan)

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

B (Panggilan 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang salah dengan perhitungan pembagian kueri SQL Server ini?

  2. Cara Mengetahui Cara Menangani Korupsi Basis Data di SQL Server

  3. Arah pesanan dinamis

  4. Cara Menghentikan/Memulai Antrian Surat Database di SQL Server (T-SQL)

  5. Baris SQL ke Kolom