2017-05-23 3 views
0

Je veux avoir un champ de pourcentage dans plusieurs tables. Dans toutes ces colonnes, je voudrais valider sa valeur est toujours comprise entre 0 et 100.Comment réutiliser vérifier la contrainte dans plusieurs colonnes ou utiliser des relations

Pour ce qui une option est préférable

  1. Définir contrainte de vérification individuelle à toutes les colonnes de toutes les tables
  2. Si nous pouvons réutiliser cette contrainte, comment pouvons-nous?

ou

  1. Définir une nouvelle plage règle
  2. utilisation de appelé pour cent type de données défini par l'utilisateur et d'appliquer cette règle
+1

['CREATE RULE'] (https://docs.microsoft.com/en-us/sql/t-sql/statements/create-rule-transact-sql):" Cette fonctionnalité sera supprimée dans un futur version de Microsoft SQL Server Évitez d'utiliser cette fonctionnalité dans le nouveau travail de développement ... " –

+0

définir la fonction scalaire et l'utiliser semble être une bonne option – KoolKabin

Répondre

0

C'est probablement pas une contrainte « assez grand » pour embêter avec réutiliser ... mais si vous le deviez, vous pourriez définir une fonction scalaire et avoir une contrainte de vérification s'y référer ... comme:

create function dbo.IsLegalC(@c int) returns bit as 
begin 
    return(select case when @c >=0 and @c <=100 then 1 else 0 end) 
end 

go 

create table dbo.t 
(
    c 
    smallint not null 
    constraint [t.c.check] 
     check(dbo.IsLegalC(c) = 1) 
) 

... mais c'est excessif (et pas particulièrement efficace), alors que vous pourriez juste avoir une expression between dans la contrainte.

+0

si nous utilisons entre en contrainte directe, dans ce cas, chaque fois que notre règle/critères à l'avenir – KoolKabin

+0

D'accord - où la fonction «aide» ... mais modifier une fonction liée à une table signifie toujours que vous devez forcer les tables à être revérifiées lorsque vous modifiez la fonction. – Clay

+1

@KoolKabin - mais vous donnez l'exemple est des pourcentages. Je n'ai pas vérifié, mais je ne pense pas que la définition des pourcentages ait changé ... jamais. –