2016-12-11 3 views
0

以下の例では、1つの例外を除いてクエリを実行することができました。 RxSqlServerDataのステップでsource.queryの代わりにqを使用すると、エラーrxCompleteClusterJob Execution haltedが返されます。RevoScaleRを使用したT-SQLのTempテーブルとストアドプロシージャ

最初の目標は、長いクエリの代わりにストアドプロシージャを使用することです。これは可能ですか?

第2の目標は、ストアドプロシージャ内の#TEMPORARYテーブルを作成して呼び出すことです。それが可能なのかどうか疑問に思っていますか?

library (RODBC) 
library (RevoScaleR) 
sqlConnString <- "Driver=SQL Server;Server=SAMPLE_SERVER; Database=SAMPLE_DATABASE;Trusted_Connection=True" 
sqlWait <- TRUE 
sqlConsoleOutput <- FALSE 
sql_share_directory <- paste("D:\\RWork\\AllShare\\", Sys.getenv("USERNAME"), sep = "") 
sqlCompute <- RxInSqlServer(connectionString = sqlConnString, wait = sqlWait, consoleOutput = sqlConsoleOutput) 
rxSetComputeContext(sqlCompute) 


#This Sample Query Works 
source.query <- paste("SELECT CASE WHEN [Order Date Key] = [Picked Date Key]", 
           "THEN 1 ELSE 0 END AS SameDayFulfillment,", 
           "[City Key] AS city, [STOCK ITEM KEY] AS item,", 
           "[PICKER KEY] AS picker, [QUANTITY] AS quantity", 
           "FROM [WideWorldImportersDW].[FACT].[ORDER]", 
           "WHERE [WWI ORDER ID] >= 63968") 
#This Query Does Not 
q <- paste("EXEC [dbo].[SAMPLE_STORED_PROCEDURE]") 
inDataSource <- RxSqlServerData(sqlQuery=q, connectionString=sqlConnString, rowsPerRead=500) 
order.logit.rx <- rxLogit(SameDayFulfillment ~ city + item + picker + quantity, data = inDataSource) 
order.logit.rx 
+0

SQLで正確にエラーが発生したSQL SERVER PROFILERでキャッチすることができます。おそらく、このユーザーはこのspを実行する権限を持っていない可能性があります。 –

+0

@IvanStarostin、私のコードを一行ずつ戻って、解決策/問題を発見しました。現時点では、ストアドプロシージャではなく、入力データセットとしてT-SQL SELECT文だけが使用できます。ここでは、[T-SQL select文をsp_execute_external_scriptに渡す]トピック(https://tomaztsql.wordpress.com/2016/06/20/passing-t-sql-select-statement-to-sp_execute_external_script/)に関する興味深いブログ記事があります。 。 – Andrew

答えて

0

現時点では、ストアドプロシージャではなく、入力データセットとしてT-SQL SELECT文だけが使用できます。

関連する問題