Comment puis-je mettre en place d'un simple champ calculé dans SQL Server?
-
16-09-2019 - |
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.
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.