Je dois calculer une valeur impliquant des données de plusieurs tables. Je me demandais si l'utilisation d'une procédure stockée avec des curseurs offrirait un avantage en termes de performances par rapport à la lecture des données dans un ensemble de données (en utilisant des procédures stockées simples de sélection), puis en bouclant les enregistrements? L'ensemble de données n'est pas grand, il se compose de 6 tables, chacune avec environ 10 enregistrements, principalement des GUID, plusieurs champs nvarchar (100), une colonne float et un nvarchar (max).SQL Server - SQL Cursor vs ADO.NET
Répondre
Ce serait probablement dépendre de l'ensemble de données que vous pouvez extrayez retour (plus le jeu, plus logique, il peut être d'effectuer dans SQL Server au lieu de autour passage), mais J'ai tendance à penser que si vous cherchez à effectuer des calculs, faites-le dans votre code et loin de vos procédures stockées. Si vous avez besoin d'utiliser des curseurs pour rassembler les données, qu'il en soit ainsi, mais en les utilisant pour effectuer des calculs et d'autres fonctions non récupérables, je pense que cela devrait être évité.
Modifier: Cette Answer à une autre question connexe donnera quelques avantages et inconvénients pour les curseurs contre la mise en boucle. Cette réponse semblerait entrer en conflit avec mon affirmation précédente (lire ci-dessus) sur la mise à l'échelle. Semble suggérer que plus vous obtenez grand, plus vous voudrez probablement le déplacer vers votre code plutôt que dans la procédure stockée.
Les curseurs devraient être plus rapides (sauf si vous faites quelque chose de bizarre dans SQL et pas dans ADO.NET). Cela dit, j'ai souvent constaté que les curseurs peuvent être éliminés avec un peu de jeu de jambes. Quelle est la procédure que vous devez faire?
Cheers,
Eric
Les curseurs devraient être plus rapides, mais si vous avez beaucoup d'utilisateurs, cela va épuiser les ressources de votre serveur. Gardez à l'esprit que vous avez un langage de codage plus puissant lorsque vous écrivez des boucles dans .Net plutôt que dans SQL.
Il existe très peu d'occasions où un curseur ne peut pas être remplacé à l'aide d'un ensemble SQL standard. Si vous effectuez cette opération sur le serveur, vous pouvez utiliser une opération basée sur un ensemble. Plus de détails sur ce que vous faites? Si vous décidez d'utiliser un curseur, gardez à l'esprit qu'un curseur en lecture seule FAST_FORWARD vous donnera les meilleures performances et assurez-vous d'utiliser l'instruction deallocate pour le libérer. Voir here pour obtenir des conseils de curseur
alternative à un curseur
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. Quelle est l'utilisation de Cursor Auto Fetch dans SQL Server?
- 2. DB2 vs PostgreSQL vs SQL Server
- 3. Accès aux messages SQL Server via ADO.NET
- 4. SQL Server - Guid VS. Long
- 5. ADO.NET - Entité Data Model vs LINQ To SQL
- 6. SQL Server 2008: tinyint vs bit
- 7. SQL Server 2008 vs 2005 l'intégration Linq
- 8. chaîne de connexion de ADO.Net de SQL Server
- 9. SQL dynamique vs SQL statique
- 10. Télécharger SQL SERVER AGENT - Microsoft SQL Server
- 11. Authentification SQL Server dans SQL Server 2008
- 12. SQL Server 2005 Express installé après SQL Server 2008 Express
- 13. SQL Server 2008 SP1
- 14. SQL Server
- 15. Utilisation de varchar (MAX) vs TEXT sur SQL Server
- 16. Vues vs sous-requêtes inline SQL Server 2005/2008
- 17. VS 2008 SP1/SQL SERVER 2008 Configuration SP1/TFS PROBLEME!
- 18. Table temporaire SQL Server 2000 vs variable de table
- 19. Espace suffisant pour VS 2008 et SQL Server
- 20. ADO.Net 2.0 vs 3.5
- 21. SQL Rowcount vs Top
- 22. SQL CASE vs JOIN efficacité
- 23. SQL Server Express Edition question
- 24. Linq to Sql avec ADO.Net Data Services
- 25. Erreurs SQL Server 2000 Server
- 26. SQL server 2008 caractéristiques/avantages?
- 27. SQL Server 2008 réplication vers SQL Server 2000
- 28. Rétrogradation de SQL Server 2008 vers SQL Server 2005
- 29. SQL Server Par question SQL Server 2005 CE
- 30. Conversion de SQL Server à Oracle SQL