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?
Bitte posten Sie Ihre gespeicherte Prozedur vollständige Definition mindestens die Definition der Eingabeparameter und endgültige Ausgabe – techspider
Ihre Gespeicherte Prozedur gibt nichts zurück, oder Sie haben es nicht vollständigen Code – Marusyk
mit vollständigen SP –