Übergabe einer ID:
Der Vorteil dabei ist, dass Sie alle Schnittstellen zu Ihren gespeicherten Prozeduren vereinfachen.
Das macht es einfacher, dagegen zu kodieren. Wenn Sie den SP von mehreren Stellen aus aufrufen, müssen Sie nur einen einzigen Parameter verwenden, anstatt mehrere Parameter zu laden und zu übergeben.
Weitergabe n
Variablen:
Der Vorteil dabei ist, dass Sie Ihre Stored Procedures von der Holding-Tabelle "entkoppeln".
Das bedeutet, dass Sie die gespeicherten Prozeduren einfach direkt aufrufen können, ohne Daten in der Tabelle zu haben. Dies kann in der Zukunft nützlich sein, wenn Daten auf eine neue Art und Weise ankommen, oder für Unit-Tests, etc.
Was ist das Beste:
Ich glaube nicht, dass es darauf eine eindeutige Antwort gibt, es ist eher eine Frage der Vorlieben und Meinungen.
Ich bin der Meinung, dass es umso besser ist, je weniger eng die Dinge miteinander verbunden sind. Es ist flexibler angesichts von Veränderungen.
Ich würde es folgendermaßen machen...
CREATE PROCEDURE main_by_variable @v1 INT, @v2 INT, ...
BEGIN
EXEC sub_part_1 @v1, @v3
EXEC sub_part_2 @v2
EXEC sub_part_3 @v2, @v3
...
END
CREATE PROCEDURE main_by_id @id INT AS
BEGIN
DECLARE
@v1 INT,
@v2 INT,
...
SELECT
@v1 = field1,
@v2 = field2
FROM
holding_table
WHERE
id = @id
EXEC main_by_variable @v1, @v2, ...
END
GO;
Indem sie die main_by_variable
Prozedur haben Sie die Möglichkeit, alle Unterprozeduren zu testen, ohne tatsächlich Daten in die Holding-Tabelle eingeben zu müssen. Und diese Flexibilität ist auch Teil der Unterprozeduren.
Der Einfachheit halber können Sie aber auch die main_by_id
ist aufgeräumter. Da dies nur ein Wrapper um main_by_variable ist, kapseln Sie nur einen einzigen Schritt des Prozesses (Abrufen der Daten aus der Tabelle).
Außerdem können Sie eine Transaktion um den Datenerfassungsteil legen und die Daten aus der Tabelle löschen. Oder viele andere Optionen. Es ist flexibel, und ich mag flexibel.