2011-01-04 7 views
3

Ein sehr albernes Beispiel, aber wenn ich die maximale Order-ID aus der Order-Tabelle herausholen muss, habe ich zwei Optionen (ich weiß, dass es mehr gibt), aber ich bin nur an diesen beiden interessiert). Ich bin daran interessiert zu wissen, was letztendlich weniger Aufwand bedeutet.Einen Wert aus einem Stored-Proc als Output-Parameter gegen eine SELECT-Anweisung zurückgeben

Ein erster, die einfach den Wert wählt aus:

CREATE PROCEDURE GetLastOrderID 
AS 
SELECT Max(OrderID) FROM Orders 

und dann C# Code entspricht, um einen SQLCommand zu erstellen, um die proc auszuführen, ruft .ExecuteScalar und wirft das den Wert in einen int.

Ein zweiter, die den Wert aus als Ausgabeparameter

CREATE PROCEDURE GetLastOrderID (@MaxOrderID INT OUTPUT) 
AS 
SET @MaxOrderId = Max(OrderID) FROM Orders 

und dann entsprechend C# Code übergibt einen SQLCommand zu erstellen, um die proc auszuführen, füge einen Ausgangsparameter des Typ int, dann .ExecuteNonQuery nennen, und schließlich den Wert des Ausgabeparameters erhalten.

Gibt es einen wirklichen Vorteil von einem über den anderen? Mein Bauchgefühl ist, dass die erste Option mehr Zeit/Ressourcen braucht, weil es keine expliziten Typen gibt, aber ich würde gerne wissen, ob es eine definitive Antwort gibt. (Oder zumindest eine, die meine „Bauchgefühl“ schlägt in Bezug auf die Autorität)

+0

'OPUTPUT' Parameter sollen wesentlich leichter sein als das Konstruieren und Zurückgeben eines Recordsets. Ich habe keine Ahnung, wie viel es ist. Sollte leicht zu testen sein, indem Sie 2 Versionen erstellen und sie in einer Schleife aufrufen. –

+0

@Martin: Sie sind leichter, aber wenn Sie nicht viele Male anrufen, ist der Unterschied gering. –

Antwort

3

Nr

Der Aufwand für die Sie sich beziehen, ist vernachlässigbar im Vergleich zu tatsächlich auf etwas die TSQL MAX() Anweisung ausgeführt wird, außer eine triviale Anzahl von Zeilen.

Verwenden Sie das Formular, das am verständlichsten und am besten wartbar ist.

Sorgen Sie sich um die Leistung, wenn Sie ein Leistungsproblem erkannt haben.

+0

Bedenkt man, dies war ein "dummes" Beispiel. Sie haben die Frage nicht wirklich beantwortet, nur gesagt, dass dieses spezielle Beispiel vernachlässigbar ist, also ist es egal. Vielleicht wäre ein besseres Beispiel ein Wert in eine Tabelle einzufügen und die ID der neuen Zeile zurückzubekommen? –

+0

@Paul Sainsbury: nur die Person, die das Beispiel fragt, hat die Kontrolle über das Beispiel! ;) –

+0

@Paul: Ich finde es kein dummes Beispiel. Ich wünschte, ich hätte die Frage selbst gestellt. – Sung

Verwandte Themen