2017-01-30 46 views
0

在部署中,我必須回滾,因爲SQL導致了FOREIGN KEY CONSTRAINT錯誤。該表有數百萬行。任何人都可以在這個SQL中看到任何會導致這個問題的東空FK引用導致FK約束錯誤

我不再有原來的消息得心應手這樣的:

外鍵約束 「FSomeTable1」

...這是字面上非常香草

其他信息:

  • 這是一個新的列
  • 的種子數據是另一個腳本執行,所以沒有數據是tResult_Status

表定義:

CREATE TABLE [dbo].[SomeTable](
    [Claim_ID] [varchar](25) NOT NULL, 
    ...other columns do exist... 
    [Result_Status_Id] [uniqueidentifier] NULL, 
PRIMARY KEY CLUSTERED 
(
    [Claim_ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [stp].[tResult_Status](
    [Result_Status_Id] [UNIQUEIDENTIFIER] NOT NULL CONSTRAINT [DResult_Status] DEFAULT (NEWSEQUENTIALID()), 
    [Result_Status_Name] [NVARCHAR](50) NOT NULL, 
    [System_Value_Indicator] [BIT] NOT NULL, 
    [Executed_By_Name] [NVARCHAR](400) NOT NULL, 
    [Executed_Datetime] [DATETIME] NOT NULL, 
CONSTRAINT [PResult_Status] PRIMARY KEY CLUSTERED 
(
    [Result_Status_Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

部署腳本聲明:

ALTER TABLE [dbo].[SomeTable] WITH CHECK ADD CONSTRAINT [FSomeTable1] FOREIGN KEY([Result_Status_Id]) 
REFERENCES [dbo].[tResult_Status] ([Result_Status_Id]) 
GO 

ALTER TABLE [dbo].[SomeTable] CHECK CONSTRAINT [FSomeTable1] 
GO 
+0

你能說明總的錯誤信息嗎 – TheGameiswar

+0

這兩列的數據類型是什麼?你可以發佈(部分)爲FK中使用的兩個表創建表格腳本嗎? – Pred

+0

select * from SomeTable WHERE Result_Status_Id NOT IN(SELECT result_Status_id FROM tResult_Status)應該顯示違規的行嗎? SomaTable中的字段是否爲NULLABLE? – AntDC

回答

2

因爲您在SomeTable中的值在tResult_Status中沒有對應的值,所以不能創建FK約束。你可以通過這樣的查詢找到哪些記錄沒有有效值(根據你的表名)。

SELECT * 
FROM SomeTable s 
WHERE NOT EXISTS (SELECT 1 FROM tResult_Status r WHERE r.Result_Status_Id = s.Result_Status_Id) 
+0

這是一個新的列 –

+0

你確定,沒有任何進程/代碼寫入任何東西到新列? – Pred

+0

是的,這就是爲什麼我很困惑,沒有一個DBA的答案 - 這就是爲什麼我寫 –