2015-06-08 36 views
-2

我需要一個合同(CompanyId)和公司(CompanyId)與公司類型之間的關係等於1如何創建一個檢查(表A.Id和表B.Id和TypeId = 1)?

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

待辦事項聰明的人(誰給我-1)給我答案?否則,如果你沒有給我答案,你怎麼能給我-1。感謝您的幫助... – user1531040

+1

-1是一個寫得不好的問題,或者是一個沒有太多研究的問題,我相信。僅供參考我沒有把它投下來,但是你可以用你正在努力掙扎的東西多一些你的問題。 – haakym

+0

如果我不懂某人。我問:那是什麼意思?或者其他的東西。 – user1531040

回答

1

你不能有一個外鍵約束where子句。
但是,您可以使用常規外鍵約束和檢查約束,其中如果CompanyTypeId實際上是1,那麼您嘗試插入contractCompanyId的檢查表達式將會是。

要做到這一點,您需要創建一個用戶定義的函數,它將執行實際測試並返回一個值。例如:

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 

,然後在檢查約束,你應該執行這個功能,並檢查返回值是高於0(應該在你的情況可能是0或1):

ALTER TABLE dbo.[Contract] 
ADD CONSTRAINT CHK_Contract_Company 
    CHECK (dbo.CheckCompanyType(CompanyId, 1) > 0); 
+0

很好的答案,謝謝! – user1531040

相關問題