2009-04-03 4 views
0

J'avais un problème avec l'instruction de suppression générée automatiquement. Dans mon esprit la suppression aurait dû êtreQualité des requêtes sql générées automatiquement dans Visual Studio

DELETE [tablename] where [PK] = @param 

mais à la place il génère une requête avec 4 OR.

DELETE FROM Market 
WHERE  (@IsNull_Name = 1) 
AND (Name IS NULL) 
AND (@IsNull_Description = 1) 
AND (Description IS NULL) 
AND (MarketId = @Original_MarketId) 
OR 
(@IsNull_Name = 1) 
AND (Name IS NULL) 
AND (Description = @Original_Description) 
AND (MarketId = @Original_MarketId) 
OR 
(Name = @Original_Name) 
AND (@IsNull_Description = 1) 
AND (Description IS NULL) 
AND (MarketId = @Original_MarketId) 
OR 
(Name = @Original_Name) 
AND (Description = @Original_Description) 
AND (MarketId = @Original_MarketId) 

Les outils de dataset insistent presque avoir des requêtes impliquant PK/index pourquoi il génère ce code complexe?

Est-ce que ce code est une «meilleure pratique», si quelqu'un peut me diriger vers une documentation?

Sûrement le cas simple est le code requis de 99%, l'autre 1% devrait être le temps dont vous avez besoin pour éditer le code généré automatiquement ou ajouter le nôtre.

Répondre

1

Ceci est basé sur la simultanéité optimiste - il doit vérifier toutes les valeurs étaient les mêmes avant de faire la suppression.

+0

Maintenant, vous avez dit que la grande requête a plus de sens. Le problème que j'avais était de lier un FormView à un DataSource qui utilise l'instruction de suppression ci-dessus - il n'a pas fait la suppression. Peut-être que le FV ne liait pas les valeurs correctes dans le DeleteTemplate: - Je vais vérifier cela. – Adrian

Questions connexes