SQL Server 2008 中具有檢查約束的自訂函數
在SQL Server 2008 中,您可以建立自訂函數來強制執行檢查約束。當您需要跨多個表檢查資料或執行複雜的驗證時,這非常有用。
問題陳述:
您有兩個現有的桌子、場地和活動,並且您希望確保events 表的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;
檢查約束的連接語句:
要建立比較兩個表中的資料的檢查約束,您可以使用CHECK子句中的連接語句。 JOIN 子句可讓您指定兩個表之間的關係以及要比較的欄位。
解決方案:
以下程式碼建立一個名為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);
此解決方案在函數中使用case 表達式如果容量足夠則回傳0,否則傳回1。然後,檢查約束會檢查函數的回傳值,並在超出容量時阻止儲存任何事件。
以上是如何在 SQL Server 2008 中建立具有檢查約束的自訂函數來驗證多個表中的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!