2015-10-20 23 views
0

我一直在尋找在SSMS中產生的所有表的腳本,我注意到了這一點:它是安全的刪除相同外鍵

/****** Object: ForeignKey [FK_User__ACRNL__1C722D53] Script Date: 10/19/2015 16:28:12 ******/ 
ALTER TABLE [dbo].[User_Funding] WITH CHECK ADD FOREIGN KEY([ACRNLocation]) 
REFERENCES [dbo].[Location] ([location]) 
GO 
/****** Object: ForeignKey [FK_User__ACRNL__1D66518C] Script Date: 10/19/2015 16:28:12 ******/ 
ALTER TABLE [dbo].[User_Funding] WITH CHECK ADD FOREIGN KEY([ACRNLocation]) 
REFERENCES [dbo].[Location] ([location]) 
GO 
/****** Object: ForeignKey [FK_User__ACRNL__1E5A75C5] Script Date: 10/19/2015 16:28:12 ******/ 
ALTER TABLE [dbo].[User_Funding] WITH CHECK ADD FOREIGN KEY([ACRNLocation]) 
REFERENCES [dbo].[Location] ([location]) 
GO 
/****** Object: ForeignKey [FK_User__ACRNL__4EFDAD20] Script Date: 10/19/2015 16:28:12 ******/ 
ALTER TABLE [dbo].[User_Funding] WITH CHECK ADD FOREIGN KEY([ACRNLocation]) 
REFERENCES [dbo].[Location] ([location]) 
GO 
/****** Object: ForeignKey [FK_User__ACRNL__4FF1D159] Script Date: 10/19/2015 16:28:12 ******/ 
ALTER TABLE [dbo].[User_Funding] WITH CHECK ADD FOREIGN KEY([ACRNLocation]) 
REFERENCES [dbo].[Location] ([location]) 
GO 
/****** Object: ForeignKey [FK_User__ACRNL__50E5F592] Script Date: 10/19/2015 16:28:12 ******/ 
ALTER TABLE [dbo].[User_Funding] WITH CHECK ADD FOREIGN KEY([ACRNLocation]) 
REFERENCES [dbo].[Location] ([location]) 
GO 
/****** Object: ForeignKey [FK_User_ACRNL_7834CCDD] Script Date: 10/19/2015 16:28:12 ******/ 
ALTER TABLE [dbo].[User_Funding] WITH CHECK ADD FOREIGN KEY([ACRNLocation]) 
REFERENCES [dbo].[Location] ([location]) 

從我看到有User_Funding表內的位置7​​個外鍵。

我可以刪除其中的6個外鍵嗎?或者我應該深入瞭解爲什麼有7個外鍵?

+2

是的,他們是多餘的 –

+1

兩者。你可以刪除其中的6個,*和*你應該深入瞭解爲什麼有7個。特別是當他們看起來像機器生成的可疑,而不是由人添加,這意味着他們可能會回來。 –

回答

2

是的。刪除所有,但一個。

您可能正在運行一些SQL來發布更新。它可能會檢查FK名稱是否已經存在,但隨後創建一個沒有名稱的FK,這會產生隨機的「_7834CCDD」。

改變它的樣子:

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_User_Funding_Location]') AND parent_object_id = OBJECT_ID(N'[dbo].[User_Funding]')) 
ALTER TABLE [dbo].[User_Funding] ADD CONSTRAINT [FK_User_Funding_Location] FOREIGN KEY([ACRNLocation]) 
REFERENCES [dbo].[Location] ([location]) 

的[FK_User_Funding_Location]後 「添加約束」 確保名稱是不是隨機的。

我已經處理了這個問題,甚至不得不寫一個腳本來刪除除一個以外的所有內容,並將最後一個重命名爲非隨機內容。