Ich muss einen Wert mit Daten aus mehreren Tabellen berechnen. Ich habe mich gefragt, ob die Verwendung einer gespeicherten Prozedur mit Cursorn einen Leistungsvorteil im Vergleich zum Lesen der Daten in ein Dataset (mit Hilfe einfacher ausgewählter gespeicherter Prozeduren) und zum anschließenden Durchlaufen der Datensätze bietet? Das Dataset ist nicht groß, es besteht aus 6 Tabellen mit jeweils etwa 10 Datensätzen, hauptsächlich GUIDs, mehreren nvarchar (100) -Feldern, einer float-Spalte und einem nvarchar (max).SQL Server - SQL Cursor vs ADO.NET
Antwort
, die wahrscheinlich auf den Datensatz abhängen würden Sie werden das Abrufen zurück kann (je größer die Menge, desto logischer es kann innerhalb von SQL Server auszuführen sein, anstatt es um zugeben), aber Ich neige dazu, zu denken, dass, wenn Sie Berechnungen durchführen möchten, dies in Ihrem Code und weg von Ihren gespeicherten Prozeduren geschieht. Wenn Sie Cursor verwenden müssen, um die Daten zusammen zu ziehen, so sei es, aber ich benutze sie, um Berechnungen und andere nicht-retrieval Funktionen zu machen, von denen ich denke, sollte davor abgeschreckt werden.
Bearbeiten: Diese Answer zu einer anderen verwandten Frage wird einige Vor- und Nachteile zu Cursors vs. Schleifen geben. Diese Antwort scheint mit meiner vorherigen Behauptung (siehe oben) über die Skalierung zu kollidieren. Scheint, je mehr Sie erhalten, desto mehr möchten Sie es wahrscheinlich zu Ihrem Code statt in der gespeicherten Prozedur verschieben.
Cursor sollten schneller sein (es sei denn, Sie tun etwas seltsam in SQL und nicht in ADO.NET).
Das gesagt, ich habe oft gefunden, dass Cursor mit ein wenig Beinarbeit beseitigt werden können. Wie müssen Sie vorgehen?
Cheers,
Eric
Cursor sollte schneller sein, aber wenn Sie viele Benutzer haben, wird es Ihre Server-Ressourcen auffressen. Denken Sie daran, dass Sie beim Schreiben von Schleifen in .Net anstelle von SQL eine leistungsfähigere Programmiersprache haben.
Es gibt sehr wenige Gelegenheiten, bei denen ein Cursor nicht mithilfe von SQL-Standardsätzen ersetzt werden kann. Wenn Sie diese Operation auf dem Server ausführen, können Sie möglicherweise eine Set-basierte Operation verwenden. Noch mehr Details zu dem, was Sie tun?
Wenn Sie sich dafür entscheiden, einen Cursor zu verwenden, beachten Sie, dass ein schreibgeschützter FAST_FORWARD-Cursor Ihnen die beste Leistung bietet, und stellen Sie sicher, dass Sie die Deallocate-Anweisung verwenden. Siehe here für Cursor-Tipps
Alternative zu einem Cursor
declare @table table (Fields int)
declare @count int
declare @i
insert inot @table (Fields)
select Fields
from Table
select @count = count(*) from @table
while (@i<[email protected])
begin
--whatever you need to do
set @i = @i + 1
end
- 1. LINQ zu SQL vs ADO.Net
- 2. SQL Server-Cursor-Problem
- 3. SQL Server Unterstützung mit Cursor
- 4. SQL Server-Cursor, schreckliche Leistung?
- 5. SQL Server/ADO.NET: Sperren von Problemen
- 6. SPID eines SqlConnection (SQL-Server) in ADO.NET
- 7. Verbindungszeichenfolge von ADO.Net von SQL Server
- 8. Zugriff auf SQL Server-Nachrichten über ADO.NET
- 9. CURSOR in SQL-Server nicht aufhören
- 10. Cursor-Status, C++ Nebenläufigkeit und SQL-Server
- 11. Schleife in SQL Server ohne einen Cursor
- 12. SQL Server Cursor Referenz (Syntax usw.)
- 13. Alternativen zu SQL-Cursor
- 14. Memcached vs SQL Server-Cache
- 15. SQL Server IIF vs CASE
- 16. SQL Server Express vs. MySQL
- 17. SQL Server: 'enthält' vs 'charindex'
- 18. Wie schreibe ich den gleichen ado.net-Code für SQL Server und SQL Server Compact?
- 19. Cursor in SQL vermeiden
- 20. Timeouteinstellung für SQL Server
- 21. Vorteile zur Verwendung von Cursor-Variable in SQL Server (deklarieren @cn Cursor)
- 22. Konvertiert SQL Server 2005 Zeitfelder automatisch in UTC? Hat ADO.Net?
- 23. SQL Server 2008 importieren Schema und Daten von ADO.NET Provider?
- 24. Wie lautet die standardmäßige Transaktionsisolationsstufe für SQL Server mit ADO.NET?
- 25. Wie bekomme ich LIKE-Klausel in ADO.NET und SQL Server
- 26. SQL Server-Abfrage läuft langsamer von ADO.NET als in SSMS
- 27. Ermitteln der Version von SQL Server von ADO.NET
- 28. Verbindung mit SQL Server über ADO.NET - leere Listbox
- 29. mysql @@ identity vs sql-server last_insert_id()
- 30. Filetgröße vs Datenbankgröße in sql Server