我需要合同(CompanyId)和公司(CompanyId)之间的关系,公司类型等于1.
ALTER TABLE [dbo].[Contract] WITH CHECK ADD CONSTRAINT [FK_Contract_Company] FOREIGN KEY([CompanyId])
REFERENCES [dbo].[Company] ([CompanyId]) WHERE CompanyTypeId = 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