2008-09-29 11 views
0

J'ai une curieuse question sur l'efficacité. Dire que j'ai un champ sur une base de données qui est juste un chiffre numérique qui représente quelque chose d'autre. Comme, une valeur de 1 signifie que le terme est de 30 jours.Manipuler des résultats dans GridView RowDataBound ou directement dans SQL?

Serait-il préférable (plus efficace) pour coder une instruction SELECT comme celui-ci ...

SELECT 
    CASE TermId 
     WHEN 1 THEN '30 days' 
     WHEN 2 THEN '60 days' 
    END AS Term 
FROM MyTable 

... et lier les résultats directement au GridView, ou serait-il préférable d'évaluer la Termid champ dans l'événement RowDataBound de GridView et modifier le texte de la cellule en conséquence?

Ne vous inquiétez pas de l'extensibilité ou quoi que ce soit de ce genre, je ne suis préoccupé par les différences dans l'efficacité globale. Pour ce que ça vaut, la base de données réside sur le serveur web.

Répondre

1

L'efficacité n'aurait probablement pas d'importance ici - la maintenabilité du code le permet. Posez-vous la question: ces valeurs vont-elles changer? Et s'ils le font? Que devrais-je faire après 2 ans d'utilisation si ces valeurs changent? S'il devient évident que les scripter en SQL signifierait une meilleure maintenabilité (plus facile à changer), alors faites-le dans une procédure stockée. S'il est plus facile de les modifier ultérieurement, faites-le. Les avantages de l'une ou l'autre sont assez faibles, car le code n'a pas l'air complexe du tout.

0

Pour un certain nombre de raisons, je traiterais la traduction dans la vue de la grille.

Raison n ° 1: la ressource SQL est partagée. La grille est distribuée. Meilleure évolutivité

Raison n ° 2: Bande passante inférieure pour transmettre un couple d'entiers par rapport à des chaînes.

Raison n ° 3: le code peut être localisé pour d'autres langues sans affecter le code SQL Server.

+0

Je ne comprends pas la raison # 2. La bande passante ne sera-t-elle pas la même puisque l'utilisateur verra la même chose quelle que soit la méthode choisie? –

+0

Mon mauvais sur # 2. Je n'ai pas remarqué que l'environnement était ASP.NET. Je pensais à une grille WinForms. – hurcane

0

Un champ dans une table de base de données appelée TermID impliquerait lui-même de représenter une clé étrangère dans une autre table (peut-être appelée "Term").

Si tel est le cas, alors peut-être que cette table a (ou devrait avoir), un champ de description qui pourrait contenir le texte "30 jours". Vous pouvez/devriez vous joindre à cette table pour récupérer le texte descriptif.

Bien que cette jointure ne puisse pas améliorer l'efficacité, elle est assez légère pour ne pas gêner.

+0

Non, nous n'avons pas d'autre table avec des descriptions. Ces chiffres sont établis à l'interne et bien connus. –