Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách đọc nhiều tập kết quả được trả về từ một thủ tục được lưu trữ trên SQL Server trong R

RODBC có thể không có tính năng truy xuất nhiều tập bản ghi từ một thủ tục được lưu trữ. Tuy nhiên, Windows ADO có NextRecordSet () phương pháp. Cân nhắc để R thực hiện cuộc gọi giao diện COM tới ADO bằng RDCOMClient thư viện (giả sử tất nhiên bạn sử dụng R cho Windows). Trong đối tượng kết nối của ADO, bạn chuyển cùng một chuỗi kết nối như bạn đã làm trong RODBC.

Bên dưới truy xuất kết quả truy vấn với GetRows () trả về mảng hai chiều được dịch dưới dạng danh sách lồng nhau trong R.

Máy chủ SQL (Proc được lưu trữ)

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

R (Cuộc gọi 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. Xóa dấu ngoặc kép được thêm vào tên cột từ Excel nhập SQL Server 2008

  2. Vấn đề về hàm Sql Câu lệnh cuối cùng được bao gồm trong một hàm phải là câu lệnh trả về

  3. đơn giản hóa câu lệnh SQL bằng cách sử dụng CTE

  4. Lỗi 'Phải khai báo biến vô hướng' khi chuyển tham số có giá trị bảng sang câu lệnh SQL được tham số hóa

  5. Nhập cột bảng tính Excel vào cơ sở dữ liệu SQL Server