16 votes

Comment puis-je configurer un champ calculé simple dans SQL Server?

J'ai une table avec plusieurs champs de compte comme ceci :

MAIN_ACCT
GROUP_ACCT
SUB_ACCT

J'ai souvent besoin de les combiner comme ceci :

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT
FROM ACCOUNT_TABLE

J'aimerais avoir un champ calculé qui le fasse automatiquement, ainsi je pourrais simplement dire :

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE

Quelle est la meilleure façon de faire cela ?

J'utilise SQL Server 2005.

27voto

HLGEM Points 54641
ALTER TABLE ACCOUNT_TABLE 
AJOUTER ACCT_NUMBER EN TANT QUE MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED

Cela conservera une colonne calculée et peut être plus performant dans les sélections qu'un calcul dans une vue ou une fonction utilisateur si vous avez un grand nombre d'enregistrements (une fois la création initiale de la colonne effectuée, ce qui peut être extrêmement lent et devrait probablement se produire pendant les périodes de faible utilisation). Cela ralentira les insertions et les mises à jour. Habituellement, je trouve qu'une insertion ou une mise à jour lente est mieux tolérée par les utilisateurs qu'un retard dans une sélection à moins que vous ne rencontriez des problèmes de verrouillage.

La meilleure méthode pour faire cela dépendra beaucoup de votre utilisation et du type de performance dont vous avez besoin. Si vous n'avez pas beaucoup d'enregistrements ou si la colonne calculée ne sera pas appelée très fréquemment, vous ne voudrez peut-être pas une colonne persistée, mais si vous exécutez fréquemment des rapports avec tous les enregistrements de l'année ou d'autres grands ensembles de données, vous pourriez trouver que la colonne calculée persistante fonctionne mieux pour vous. Comme pour toute tâche de cette nature, la seule façon de savoir ce qui fonctionne le mieux dans votre situation est de tester.

8voto

p.campbell Points 42771

Ceci est un excellent candidat pour une Vue.

CREATE VIEW vwACCOUNT_TABLE
AS

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT AS ACCT_NUMBER 
FROM ACCOUNT_TABLE

GO

--maintenant sélectionnez à partir de la Vue
SELECT ACCT_NUMBER FROM  vwACCOUNT_TABLE

5voto

Remus Rusanu Points 159382
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT; 

la colonne n'est pas persistée dans la table, elle sera recréée à chaque fois que vous y faites référence. Vous pouvez obtenir le même résultat en utilisant une vue. Si vous utilisez des prédicats de filtrage ou un ordre sur la colonne calculée et que vous voulez y ajouter un index, consultez Création d'index sur les colonnes calculées.

3voto

DavidStein Points 1070

Eh bien, vous pourriez créer une vue de la TABLE_COMPTE et interroger cela. Ou je crois que vous pourriez créer une fonction utilisateur définie qui accomplirait la même chose.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X