使用檢查約束驗證跨表的範圍約束
考慮兩個表:ProjectTimeSpan 和 SubProjectTimeSpan,它們都包含 StartDate 和 EndDate 欄位。出現這樣的場景:需要檢查約束來確保 SubProjectTimeSpan 的 StartDate 和 EndDate 始終落在 ProjectTimeSpan 對應的日期範圍內。
常規檢查約束
常規檢查約束通常比較同一表中的值。但是,在這種情況下,條件需要引用另一個表中的值。
使用函數擴充檢查限制
一種解決方案是將檢查限制與可以從 ProjectTimeSpan 擷取相關資料的函數。透過定義像 CheckFunction() 這樣的函數並在約束內引用它,資料庫可以根據 ProjectTimeSpan 中儲存的值動態驗證日期範圍。
例如,以下程式碼片段示範如何實現此類檢查限制:
ALTER TABLE SubProjectTimeSpan ADD CONSTRAINT chk_CheckFunction CHECK (dbo.CheckFunction() = 1)
CheckFunction 函數可以定義如下:
CREATE FUNCTION dbo.CheckFunction() RETURNS INT AS BEGIN RETURN (SELECT 1) END
函數可以從ProjectTimeSpan 擷取必要的數據並執行所需的比較。這種方法允許跨多個表動態驗證日期範圍,解決最初的問題陳述。
以上是檢查約束如何跨多個資料庫表驗證範圍約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!