SQL Server 2008 のチェック制約を含むカスタム関数
SQL Server 2008 では、チェック制約を強制するカスタム関数を作成できます。これは、複数のテーブルにわたるデータをチェックする必要がある場合や、複雑な検証を実行する必要がある場合に便利です。
問題ステートメント:
既存のテーブル、会場、イベントが 2 つあり、イベントテーブルのevent_expected_attendance列の値が常に会場のvenue_max_capacity列以下であることを確認したいtable.
カスタム関数の構文:
カスタム関数は次の構文を取ります:
CREATE FUNCTION [schema_name].[function_name] ( [parameter_list] ) RETURNS [return_type] AS BEGIN -- Function body RETURN [return_value]; END;
チェック制約の結合ステートメント:
2 つのデータを比較するチェック制約を作成するにはテーブルの場合、CHECK 句で結合ステートメントを使用できます。 JOIN 句を使用すると、比較する 2 つのテーブルと列の間の関係を指定できます。
解決策:
次のコードは、CheckVenueCapacity という名前のカスタム関数を作成し、関数を使用して容量ルールを強制するチェック制約:
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);
このソリューションは、容量が十分な場合は 0 を返し、そうでない場合は 1 を返す関数。次に、チェック制約によって関数の戻り値がチェックされ、容量を超えた場合はイベントが保存されなくなります。
以上がSQL Server 2008 でチェック制約を持つカスタム関数を作成して、複数のテーブルにわたってデータを検証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。