2017-07-20 5 views
0

Ich frage mich, wie man Ergebnisse aus einer gespeicherten Prozedur in R. holen würde ich zur Zeit RStudio mit dem RODBC Paket mit undFetching Ergebnisse von Stored Procedure R

sqlQuery(conn, 'exec sp_name vars') 

als meine Abfrage verwenden. Die gespeicherte Prozedur soll eine Ganzzahl zurückgeben, die die neue Zeilennummer darstellt, auf der die Daten generiert werden. Wie würde ich darüber gehen? Im Moment bekomme ich -2 oder character(0) zurück auf meine Ausführungen.

Nur versuchen, eine Nummer zurückgeben und speichern Sie es R-Seite.

Stored Procedure

USE [Internship] 
GO 

/****** Object: StoredProcedure [dbo].[pCreateKMeanTest] Script Date: 7/20/2017 12:51:28 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 





ALTER procedure [dbo].[pCreateKMeanTest] 
    (@DataSetName varchar(255) 
    ,@SQLStatement varchar(5000) 
    ,@ColumnUsed varchar(2900) 
    ,@TotClusters int) 

as 

/* 
exec pCreateKMeanTest 
    @DataSetName = '[dbo].[vAccountMemberProductDetailWithBehavior]' 
    ,@SQLStatement = 'select [demo_age], Profit_PnlAmt, Census_HomeNearestBranchDistance from [dbo].[vAccountMemberProductDetailWithBehavior]' 
    ,@ColumnUsed = 3 
    ,@TotClusters = 5 
*/ 


begin transaction 

insert into dbo.KMean 
    (ExecutedDateTime 
    ,DataSetName 
    ,SQLStatement 
    ,ColumnUsed 
    ,TotClusters) 
select 
    getdate() 
    ,@DataSetName 
    ,@SQLStatement 
    ,@ColumnUsed 
    ,@TotClusters 

select max(TestID) from dbo.KMean (nolock) 

commit transaction 



GO 
+0

Können wir Ihre gespeicherte Prozedur sehen? Ist es eine benutzerdefinierte sp oder eine eingebaute sp 'name? Es kann zu Sicherheitsproblemen kommen, wenn Systemprozeduren über odbc ausgeführt werden. – Parfait

+0

@Parfait Das ist der Code der gespeicherten Prozedur. – Jon

+0

Versuchen Sie 'SET NOCOUNT ON' innerhalb von gespeicherten Proc hinzuzufügen und verschieben Sie die letzte 'SELECT max (...)' Abfrage außerhalb der Transaktion. – Parfait

Antwort

2

Wie kommentiert und da es zukünftige Leser helfen können:

Für SQL Server gespeicherte Prozeduren, fügen Sie eine SET NOCOUNT ON die Zeile Ergebnisausgabe zu vermeiden, die mit RODBC interferieren kann sqlQuery welches erwartet, dass Tabellen-/Anfragedaten zurückgegeben werden.

Und in der Regel für die meisten gespeicherten Prozeduren, bewegen jede SELECT Anweisung außerhalb eines Transaktionsblockes, der eine Aktion Abfrage ausgeführt wird (das heißt, UPDATE, INSERT INTO), wenn um Ist-Daten zurückzukehren.

+0

gilt diese 'SET NOCOUNT ON'-Empfehlung auch für das relativ neue' odbc'-Paket? Die DBI-Betreuer und First-Studio-Entwickler arbeiten hart daran, es zum Nachfolger von 'RODBC' zu machen. – knb

+0

Gute Frage. Da dies jedoch eher ein SQL Server-Problem bei der Rückgabe einer nicht tabellarischen Ausgabe ist, weiß ich nicht, wie Autoren das umgehen können. Hier brauchte nichts auf der R-Seite geändert zu werden. – Parfait