如何创建一个检查(表A.Id和表B.Id和TypeId = 1)?

时间:2015-06-08 10:48:31

标签: sql-server-2008

我需要合同(CompanyId)和公司(CompanyId)之间的关系,公司类型等于1.

ALTER TABLE [dbo].[Contract]  WITH CHECK ADD  CONSTRAINT [FK_Contract_Company] FOREIGN KEY([CompanyId])
REFERENCES [dbo].[Company] ([CompanyId]) WHERE CompanyTypeId = 1

1 个答案:

答案 0 :(得分:1)

你不能在外键约束上有where子句 但是,您可以使用常规外键约束和检查约束,如果您尝试插入CompanyTypeId的{​​{1}} CompanyId实际为1,则检查表达式将是{1}}

为此,您需要创建一个用户定义的函数,该函数将执行实际测试并返回一个值。例如:

contract

然后在你的检查约束中你应该执行这个函数并检查返回的值是否高于0(在你的情况下应该可能是0或1):

CREATE FUNCTION CheckCompanyType 
(
    @CompanyId int, 
    @AllowdCompanyType int)
RETURNS int
AS
BEGIN
    DECLARE @RetVal int
    SELECT @RetVal = COUNT(*)
    FROM Company
    WHERE CompanyId = @CompanyId 
    AND CompanyTypeId = @AllowdCompanyType 
    RETURN @RetVal
END