Marquage des colonnes calculées persistantes PAS NULL dans SQL Server Management Studio
Il est possible dans SQL Server 2005 pour créer une colonne calculée qui est à la fois conservée et est définie comme not NULL (ne peut pas contenir une valeur null). Le 2ème est l'attribut de l'importance lors de l'utilisation des bibliothèques comme Linq2Sql si nous voulons éviter beaucoup de travail manuel pour assurer notre code que la colonne 'toujours' a une valeur.
Droites avec SQL c'est très simple:
ALTER TABLE Sales ADD Total AS (Price + Taxes) PERSISTED NOT NULL
Lors de l'affichage dans la fenêtre de conception de SQL Server Management studio, cette colonne est correctement affiché comme une colonne calculée avec pas de coche pour "autorise les valeurs null'. Cependant je rencontre un problème de création de nouvelles colonnes dans le concepteur pour correspondre à ce modèle: La formule est entrée dans la Spécification de la Colonne Calculée -> (Formule) de la propriété, et la propriété persisted est spécifié par le réglage Est conservé Oui, mais toute tentative pour décochez la case "accepte les valeurs null' sur une nouvelle colonne calculée résultats dans une boîte de dialogue indiquant "Propriété ne peut pas être modifié".
J'ai besoin de couvrir un large éventail de niveaux de compétence, et pour ce faire j'ai besoin de prévoir des procédures pour l'ajout de colonnes que même un novice peut suivre (ce qui signifie la Gestion de Studio de concepteur de la fenêtre). Est-il un secret dans SQL Server Management Studio pour la création d'une nouvelle colonne calculée comme not NULL dans le concepteur, semblables à dire comment CTRL+0 peut être utilisé pour insérer des valeurs null dans les cellules?
- Au moins avec SQL Server 2014, votre code fonctionne tout de suite.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez tricher avec cette
ISNULL(Price + Taxes, 0)
qui utilise la valeur par défaut 0 valeur NULL calculs.Comme Scoregraphic notes, vous pouvez le faire avec
ISNULL
.J'utilise souvent cette calculée pour les drapeaux, par exemple, dans le
User
table, j'ai unDeletedDate
de savoir quand le compte a été supprimé. J'ai ensuite créer un calculées non nullable colonne booléenne appeléeIsDeleted
(type bit) comme ceci:La chose importante à noter est que le ISNULL doit être sur la partie la plus extérieure de l'expression pour le concepteur à réaliser que c'est un non nullable colonne calculée.
J'ai essayé et en regardant dans l'arborescence sur la gauche, il avait en effet fixé la colonne comme n'étant pas nulle, même si dans le volet droit de la fenêtre du concepteur de la case n'était pas cochée...
Selon cet article la possibilité de valeur null est déterminé par sqlserver basé sur la valeur de l'expression calculée. Depuis
Price
ouTaxes
est probablement prendre la valeur null, il ne peut pas être sûr que leur somme n'est jamais null.Cependant, comme @Richard indique, à l'aide de la
ISNULL
méthode permet d'éviter cela. Déclarer la colonneNOT NULL
devrait toutefois pas être nécessaire, comme ce que j'ai compris.Price
niTaxes
sont les valeurs null.