2016-12-11 16 views
0

В приведенном ниже примере мне удалось заставить запрос работать с одним исключением. Когда я использую q вместо source.query во время этапа RxSqlServerData, я получаю ошибку rxCompleteClusterJob Execution halted.Таблицы T-SQL Temp и хранимые процедуры из R с использованием RevoScaleR

Первой целью является использование хранимой процедуры вместо более длинного запроса. Это возможно?

Второй целью было бы создать и вызвать таблицу #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 SERVER PROFILER, который в SQL-версии происходит с ошибкой. Возможно, у этого пользователя нет прав для запуска этого sp. –

+0

@IvanStarostin, вернувшись через мой код по строкам, я нашел решение/проблему. В настоящее время разрешены только операторы SELECT T-SQL в качестве входных данных, а не хранимых процедур. Вот интересное сообщение в блоге по теме [Передача инструкции выбора T-SQL в sp_execute_external_script] (https://tomaztsql.wordpress.com/2016/06/20/passing-t-sql-select-statement-to-sp_execute_external_script/) , – Andrew

ответ

0

В настоящее время допускаются только операторы SELECT T-SQL в качестве входных данных, а не хранимых процедур.