在 SQL Server 2008 R2 中,嘗試使用子查詢定義檢查約束,例如:
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (MyField in (Select Field From Table2))
導致錯誤,表示此中不允許子查詢context.
要在沒有觸發器的情況下實現此驗證,可以建立封裝子查詢的標量函數並在檢查約束內使用。以下是一個範例:
CREATE FUNCTION myFunction( @field DATATYPE(?) ) RETURNS VARCHAR(5) AS BEGIN IF EXISTS (SELECT * FROM Table2 WHERE MYFIELD = @field) RETURN 'True' RETURN 'False' END
定義函數後,可以在檢查約束中使用它,如下所示:
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (myFunction(MYFIELD) = 'True')
透過根據特定字串(例如“True”)檢查函數傳回的標量值,可以強制執行所需的驗證,而無需需要直接在檢查約束中使用子查詢。
以上是如何在 SQL Server 檢查約束中使用子查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!