![](/img/trans.png)
[英]RTVS: Visual Studio does not recognize R packages, when executing as a SQL Server stored procedure
[英]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.