2016-09-09 2 views
0

Ich habe eine Tabelle RhSeq die die folgenden Spalten enthält:gespeicherte Prozedur Wert Fetch

ScoTable (PK, varchar(20),not NULL) 
ScoColonne (PK, varchar(50), not NULL) 
ScoSequence (int, not NULL) 
ScoDescription (varchar(100), not NULL) 

I eine gespeicherte Prozedur besitzen, die, angegeben ScoTable und ScoColonne, Inkrementen ScoSequence und gibt den inkrementierten ScoSequence Wert:

EDITED - Hier ist die vollständige gespeicherte Prozedur

CREATE PROCEDURE [dbo].[usp_RhSeqNextVal] 
@table VARCHAR (20), @colonne VARCHAR (30), @sequence_id INT OUTPUT 
AS 
SET NOCOUNT ON 
SET @sequence_id = -1 

DECLARE @transaction AS BIT 
    SET @transaction = 0; 

IF 0 = @@TRANCOUNT 
BEGIN 
    BEGIN TRAN 
    SET @transaction = 1; 
END 

UPDATE dbo.RhSeq 
    SET ScoSequence = CASE WHEN Right(@colonne,1) = '-' THEN 
      ScoSequence - 1 
     ELSE 
      ScoSequence + 1 
     END 
WHERE ScoTable = @table 
    AND ScoColonne = @colonne 

SELECT @sequence_id = ScoSequence 
    FROM dbo.RhSeq 
WHERE ScoTable = @table 
    AND ScoColonne = @colonne 

IF 1 = @transaction 
BEGIN 
    COMMIT TRAN 
END 

In Vis Wenn ich mit der rechten Maustaste auf die gespeicherte Prozedur (im Server-Explorer) klicke und 'Ausführen' wähle, gebe ich Werte für ScoTable und ScoColonne ein und setze sequence_id auf null und es wird fein ausgeführt, wobei der neue inkrementierte Wert sequence_id zurückgegeben wird. Also kein Problem mit der gespeicherten Prozedur.

Das Problem, das ich habe, ist, wenn ich versuche, die zurückgegebene sequence_id in meinem Code zu bekommen.

SqlParameter param1 = new SqlParameter("@ScoTable", "MyTable"); 
SqlParameter param2 = new SqlParameter("@ScoColonne", "MyColumn"); 
SqlParameter param3 = new SqlParameter("@sequence_id", DBNull.Value); 

var numeroSequence = db.Database.SqlQuery<RhSeq>("usp_RhSeqNextVal @ScoTable,@ScoColonne, @sequence_id", param1, param2,param3).ToList(); 

I einen Fehler

System.Data.Entity.Core.EntityCommandExecutionException: Ein Mitglied der Art, ‚ScoTable‘, keine entsprechende Spalte in dem Datenleser mit denselben Name

von meinem Verständnis, der Fehler von RhSeq kommt, da die gespeicherte Prozedur nur sequence_id zurückgibt, die ein int ist, kann es schaffen keine RhSeq Objekt damit. Ich versuche, das Ergebnis auf eine int zu übertragen, aber es funktioniert immer noch nicht. Wie kann ich die von der gespeicherten Prozedur zurückgegebene sequence_id in meiner var numeroSequence speichern?

+1

Bitte posten Sie Ihre gespeicherte Prozedur vollständige Definition mindestens die Definition der Eingabeparameter und endgültige Ausgabe – techspider

+1

Ihre Gespeicherte Prozedur gibt nichts zurück, oder Sie haben es nicht vollständigen Code – Marusyk

+0

mit vollständigen SP –

Antwort

0

Hatte ein ähnliches Problem in LinqToSQL. Auswählen @sequence_id in dem Verfahren nach der Einstellung hat der Job:

In Ihrem SP nach:

SELECT @sequence_id = ScoSequence 
FROM dbo.RhSeq 
WHERE ScoTable = @table 
AND ScoColonne = @colonne 

Anzahl:

SELECT @sequence_id 

Und dann natürlich:

db.Database.SqlQuery<int>...