Question

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

Je voudrais un champ calculé qui fait automatiquement, alors je peux dire:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE

Quelle est la meilleure façon de le faire?

J'utilise SQL Server 2005.

Était-ce utile?

La solution

ALTER TABLE ACCOUNT_TABLE 
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED

persistera une colonne calculée et peut effectuer mieux sélectionner qu'un calcul en vue ou UDF si vous avez un grand nombre d'enregistrements (une fois la création intial de la colonne est arrivé qui peut être très lent et devrait probablement se produire pendant faible temps d'utilisation). Il ralentira les encarts et les mises à jour. En général, je trouve un insert lent ou mise à jour est mieux tolérés par les utilisateurs qu'un retard dans une sélection à moins que vous obtenez les problèmes de verrouillage.

La meilleure méthode pour faire cela dépendra beaucoup de votre utilisation et quel genre de performance dont vous avez besoin. Si vous ne disposez pas d'un grand nombre d'enregistrements ou si la colonne calculée ne sera pas appelée que souvent, vous ne voulez pas une colonne persistante, mais si vous êtes souvent en cours d'exécution des rapports avec tous les dossiers de l'année ou d'autres grands ensembles de données, vous pouvez trouver la colonne calculée persisté 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.

Autres conseils

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

--now select from the View
SELECT ACCT_NUMBER FROM  vwACCOUNT_TABLE
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;

la colonne n'est pas conservée dans la table, sera recréée sur le CLY chaque fois que vous référencez. Vous pouvez obtenir le même résultat en utilisant une vue. Si vous utilisez des prédicats de filtrage ou commande sur la colonne calculée et que vous voulez ajouter un index sur ce voir Création d'index sur les colonnes calculées .

Eh bien, vous pouvez créer une vue de la ACCOUNT_TABLE et requête. Ou bien je crois que vous pouvez créer une fonction définie par l'utilisateur qui accomplir la même chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top