Fonction personnalisée avec la contrainte de vérification SQL Server 2008
Je travaille avec SQL Server 2008 et j'ai deux tables existantes, venues
et events
.
Je suis en train de créer une fonction personnalisée avec une contrainte de vérification pour s'assurer que le nombre entier dans le event_expected_attendance
colonne dans la events
table est toujours inférieure ou égale à la venue_max_capacity
entier dans la venues
table.
J'ai du mal avec la syntaxe d'une fonction personnalisée ainsi que l'instruction de jointure depuis la vérification de la contrainte est entre les deux tables.
Merci pour l'aide! Je vais répondre à toutes les questions rapidement.
Oui, les deux tables sont jointes sur event_id = event_venue_id
Un déclencheur sera également accomplir cela, mais il aura une incidence sur insérer/mettre à jour/supprimer les performances. Vous construisez un trigger sur la table de
Un déclencheur sera également accomplir cela, mais il aura une incidence sur insérer/mettre à jour/supprimer les performances. Vous construisez un trigger sur la table de
events
tableau qui vérifie la venues
table et génère une erreur / restaure des valeurs non valides
OriginalL'auteur James | 2014-11-01
Vous devez vous connecter pour publier un commentaire.
Comme l'a déclaré Martin Smith à l'aide d'une contrainte de vérification avec un UDF a quelques problèmes et pourraient avoir un impact négatif sur les performances, mais si vous voulez l'essayer, de toute façon ce code devrait fonctionner:
OriginalL'auteur jpw
Vous pouvez utiliser un scalaire UDF pour cela, mais l'utilisation de ces dans les contraintes de vérification a bien documentée des problèmes (voir, par exemple, Scalaire Udf enveloppé dans la VÉRIFICATION des contraintes sont très lent et peut échouer pour les mises à jour multilignes ou L'isolement d'instantané: Une menace pour l'intégrité? de la série.
Il est également possible d'obtenir le moteur de base de données pour appliquer cela avec une vue indexée
Il a besoin d'un helper table avec 2 rangées comme des expressions de table communes et
UNION
ne sont pas autorisés dans les vues indexées. L'idée est que la définition de la vue devrait toujours revenir à zéro les lignes et cela double les lignes sont renvoyées si il y a une violation. Par conséquent à l'origine d'une violation de la contrainte unique sur la vue et en provoquant une erreur et l'échec de l'instruction.Puis la définition de la vue
Et un index unique sur la Vue
La raison pour laquelle tous les quatre colonnes, de sorte que toutes les valeurs sont indiquées dans le message d'erreur.
OriginalL'auteur Martin Smith