2017-08-02 22 views
0

我試圖運行從How to make R-code from SQL Server database?中給出的數據庫創建的R代碼,但我無法執行它。從SQL Server表中生成的R代碼將不會執行

這是我試過的。

declare @t table(f1 int, f2 int) 
insert into @t values (1,2),(3,4),(5,6) 

declare @rcode nvarchar(max) = 
concat(
'f1=c(', STUFF((SELECT concat(',', f1) 
      FROM @t 
      ORDER BY f1 
      FOR XML PATH('')),1, 1, ''),') 
f2=c(', STUFF((SELECT concat(',', f2) 
      FROM @t 
      ORDER BY f1 
      FOR XML PATH('')),1, 1, ''),')' 
     ) 

select @rcode 
EXECUTE sp_execute_external_script 
    @language = N'R' 
    , @script = N'@rcode' 

代碼輸出

消息39004,級別16,狀態20,行0
與HRESULT 0x80004004 'sp_execute_external_script' 的執行過程中發生 A 'R' 腳本錯誤。

消息39019,級別16,狀態1,行發生0
外部腳本錯誤:
錯誤源(revoScriptConnection):
revoScriptConnection:1:1:意外 '@'
1:@
^

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

我也試圖在https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/rtsql-create-a-predictive-model-r輸入和輸出數據添加到查詢,但但它仍然不會跑。

如何查看從表中的數據生成的R代碼的結果?

回答

0

我發現它更容易通過通過SQL語句變量這樣

DROP PROCEDURE IF EXISTS alpha; 
GO 
CREATE PROCEDURE alpha 
AS 
BEGIN 
    EXEC sp_execute_external_script 
    @language = N'R' 
    , @script = N'R-code' 
    , @input_data_1 = N'SQL SELECT statement' 
    , @input_data_1_name = N'Test' 
END; 
GO 
EXEC alpha; 
0

@script參數期望一個字符串值用作R腳本。在這種情況下,傳遞的字符串是'@rcode'。分配變量@rcode的值不使用引號。

declare @t table(f1 int, f2 int) 
insert into @t values (1,2),(3,4),(5,6) 

declare @rcode nvarchar(max) = 
concat(
'f1=c(', STUFF((SELECT concat(',', f1) 
      FROM @t 
      ORDER BY f1 
      FOR XML PATH('')),1, 1, ''),') 
f2=c(', STUFF((SELECT concat(',', f2) 
      FROM @t 
      ORDER BY f1 
      FOR XML PATH('')),1, 1, ''),')' 
     ) 

select @rcode 
EXECUTE sp_execute_external_script 
    @language = N'R' 
    , @script = @rcode 
+0

它看起來像這樣是行不通的。我得到f1 = c(1,3,5)f2 = c(2,4,6),但是在R中,代碼輸出兩個向量。 –