簡體   English   中英

在RTVS中使用R執行SQL存儲過程時出錯

[英]Error when Executing SQL Stored procedure with R In RTVS

我在RTVS Visual Studio 2017中使用R創建了存儲過程,並將其發布到數據庫后,在嘗試執行它時出現此錯誤:

消息39004,第16級,狀態20,第4行
使用HRESULT 0x80004004執行“ sp_execute_external_script”時發生“ R”腳本錯誤。

消息39019,第16級,州1,第4行
發生外部腳本錯誤:庫(RODBC)中的錯誤:沒有名為“ RODBC”的程序包調用:源-> withVisible-> eval-> eval->庫

ScaleR中的錯誤。 檢查輸出以獲取更多信息。 eval(expr,envir,enclos)中的錯誤:ScaleR中的錯誤。 檢查輸出以獲取更多信息。 調用:源-> withVisible-> eval-> eval-> .Call執行暫停

消息11536,級別16,狀態1,過程SqlSProc,第4行[批處理開始第2行]> EXECUTE語句失敗,因為其WITH RESULT SETS子句指定了1個結果集,但是該語句僅在以下位置發送了0個結果集運行。

這是我的SqlSProc.R代碼:

library(RODBC)
channel <- odbcDriverConnect(settings$dbConnection1)
InputDataSet <- sqlQuery(channel, iconv(paste(readLines('c:/users/abdal/source/repos/correlation/correlation/sqlsproc.query.sql', encoding = 'UTF-8', warn = FALSE), collapse = '\n'), from = 'UTF-8', to = 'ASCII', sub = ''))
odbcClose(channel)
InputDataSet$OtherLangDescription <- as.factor(InputDataSet$OtherLangDescription)
orderList <- unique(InputDataSet$OtherLangDescription)
ListId <- lapply(orderList, function(x) subset(InputDataSet, OtherLangDescription == x)$WHWorkOrderHeaderId)
Initial_Tab <- lapply(ListId, function(x) subset(InputDataSet, WHWorkOrderHeaderId %in% x)$OtherLangDescription)
Correlation_Tab <- mapply(function(Product, ID) table(Product) / length(ID),
                        Initial_Tab, ListId)
colnames(Correlation_Tab) <- orderList
cor_per <- round(Correlation_Tab * 100, 2)
OutputDataSet <- data.frame(row = rownames(cor_per)[row(cor_per)], col = colnames(cor_per)[col(cor_per)], corr = c(cor_per))
OutputDataSet <- InputDataSet

R存儲過程的SQL查詢檢索數據:

SELECT
    WHWorkOrderHeaderId, OtherLangDescription
FROM   
    Warehouse.WHWorkOrderDetails 
INNER JOIN 
    Warehouse.WHWorkOrderHeader AS WHH ON Warehouse.WHWorkOrderDetails.WHWorkOrderHeaderId = WHH.ID 
INNER JOIN 
    Warehouse.StockItems ON Warehouse.WHWorkOrderDetails.StockItemId = Warehouse.StockItems.Id 
ORDER BY  OtherLangDescription ASC

SQL PROC模板:

CREATE PROCEDURE [SqlSProc]
AS
BEGIN
EXEC sp_execute_external_script @language = N'R'
    , @script = N'_RCODE_'
    , @input_data_1 = N'_INPUT_QUERY_'
--- Edit this line to handle the output data frame.
   WITH RESULT SETS (([product_1] Nvarchar(MAX),[Product_2] Nvarchar(Max),[Correlation] INT));
END ; 

您的錯誤訊息

庫(RODBC)中的錯誤:沒有名為“ RODBC”的軟件包

指向缺少的軟件包,在使用它之前必須先安裝它:

install.packages("RODBC")
library(RODBC)
[Rest of your R-code]

以下錯誤很可能與丟失的軟件包有關。 預期會有結果集,但是SP返回的卻沒有結果...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM