Es gibt keine richtige Antwort auf diese Frage. Im Allgemeinen ist Code, der in einer gespeicherten Prozedur enthalten ist, schneller als Code von ADO.NET.
Das gesagt, gespeicherte Prozeduren und Trigger haben zwischengespeicherte Ausführungspläne (also Ad-hoc-Abfragen von ADO.NET, aber sie arbeiten ein bisschen anders). Ausführungspläne sind grundsätzlich Straßenkarten für welche Algorithmen der SQL-Server zum Ausführen von Join-Vorgängen verwenden sollte. Wenn eine gespeicherte Prozedur oder ein Trigger komplexer wird, wird der Ausführungsplan komplexer. Eine einzelne komplexe gespeicherte Prozedur kann abhängig von den an sie übergebenen Parametern auch mehr als einen Ausführungsplan enthalten. Was passieren kann, wenn eine gespeicherte Prozedur sehr komplex wird, ist, dass der SQL-Server beginnen kann, suboptimale Ausführungspläne zu wählen, die wirklich schrecklich funktionieren, und Ihr Code kann plötzlich sehr, sehr langsam werden. Wenn dies geschieht, ist der ADO.NET-Code schneller, da es sich normalerweise um mehrere kleine Ausführungspläne statt um einen großen handelt.
Im Allgemeinen, wenn ich eine Situation wie Ihre habe, werde ich wählen, gespeicherte Prozeduren zu verwenden, die nur ein paar Dinge tun. Wenn Sie mehr und mehr Aktualisierungen vornehmen müssen, wenn sich Ihre Geschäftsanforderungen ändern und Ihre gespeicherte Prozedur länger und länger wird, empfiehlt es sich, diese Prozedur in mehrere Prozeduren zu gliedern.
Ich würde die Trigger vollständig überspringen. Trigger machen es sehr schwierig, über ein System nachzudenken. Sie sind fast unmöglich zu debuggen, und das Setup für Überraschungen auf dem Weg.
Es ist ein bisschen ein Code-Geruch, dass Sie die gesamte Tabelle aktualisieren müssen, wenn eine Zeile eingefügt wird. Wenn diese Einsätze häufig auftreten, werden Sie schreckliche Leistungsprobleme haben. Ich würde nach einer Möglichkeit suchen, Ihre Daten besser zu normalisieren, damit dies möglichst nicht passieren muss.
Ich würde denken, dass es in SQL wäre schneller, als wäre es eine Reise weniger. Kann aber nicht 100% sagen. – Tim
Wenn Sie viele Zeilen einfügen, empfehle ich BulkInsert in C#. – Shyju
Der Hauptvorteil der Verwendung einer gespeicherten Prozedur besteht darin, dass Sie jeder Zeile eine eindeutige ID hinzufügen können, die beim Erstellen der ID-Nummer aus C# nicht möglich ist. Die gespeicherte Prozedur ist normalerweise schneller, da der SQL-Server die SQL-Zeichenfolge effizienter analysiert als die Netzwerkbibliothek. – jdweng