在 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中文网其他相关文章!