Maison >base de données >tutoriel mysql >Comment puis-je créer une fonction personnalisée avec une contrainte de vérification dans SQL Server 2008 pour valider les données sur plusieurs tables ?

Comment puis-je créer une fonction personnalisée avec une contrainte de vérification dans SQL Server 2008 pour valider les données sur plusieurs tables ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-25 00:20:10870parcourir

How Can I Create a Custom Function with a Check Constraint in SQL Server 2008 to Validate Data Across Multiple Tables?

Fonction personnalisée avec contrainte de vérification dans SQL Server 2008

Dans SQL Server 2008, vous pouvez créer une fonction personnalisée pour appliquer une contrainte de vérification. Ceci est utile lorsque vous devez vérifier des données sur plusieurs tables ou effectuer des validations complexes.

Énoncé du problème :

Vous disposez de deux tables, lieux et événements existants, et vous souhaitez vous assurer que la valeur de la colonne event_expected_attendance de la table des événements est toujours inférieure ou égale à la colonne venue_max_capacity des lieux table.

Syntaxe de la fonction personnalisée :

Une fonction personnalisée prend la syntaxe suivante :

CREATE FUNCTION [schema_name].[function_name] (
  [parameter_list]
)
RETURNS [return_type]
AS
BEGIN
  -- Function body
  RETURN [return_value];
END;

Instruction de jointure pour la contrainte de vérification :

Pour créer une contrainte de vérification qui compare les données de deux tables, vous pouvez utiliser une instruction de jointure dans le CHECK clause. La clause JOIN permet de préciser la relation entre les deux tables et les colonnes à comparer.

Solution :

Le code suivant crée une fonction personnalisée nommée CheckVenueCapacity et une contrainte de vérification qui utilise la fonction pour appliquer la règle de capacité :

CREATE FUNCTION dbo.CheckVenueCapacity (@venue_id int, @capacity int)
RETURNS int
AS 
BEGIN
  DECLARE @retval int

  SELECT @retval = CASE WHEN venue_max_capacity >= @capacity THEN 0 ELSE 1 END
  FROM venues
  WHERE venue_id = @venue_id 

  RETURN @retval
END;
GO

ALTER TABLE events 
ADD CONSTRAINT chkVenueCapacity 
CHECK (dbo.CheckVenueCapacity(event_venue_id, event_expected_attendance) = 0); 

Cette solution utilise une expression de cas dans la fonction pour renvoyer 0 si la capacité est suffisante et 1 sinon. La contrainte check vérifie ensuite la valeur de retour de la fonction et empêche la sauvegarde de tout événement si la capacité est dépassée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn