Foreign-Key

外鍵可以有一個預設值等於 0 嗎?

  • January 31, 2017

我有一個預設值為 0 的列。我可以將該列設置為 foreign_key

是的,您可以將預設值為 0 的列定義為外鍵。但是,要使約束起作用,您需要在源表中也有一個值為 0 的行。例子:

CREATE TABLE dbo.Master
(MasterID INT Primary Key,
Name NVARCHAR(20));

INSERT into dbo.Master values (0,NULL);
INSERT into dbo.Master values (1,'Full');
INSERT into dbo.Master values (2,'Partial');

CREATE TABLE dbo.Slave
(SlaveID INT Primary Key,
Description NVARCHAR(20),
MasterID INT FOREIGN KEY REFERENCES dbo.Master(MasterID) DEFAULT (0));

INSERT  INTO dbo.SLAVE (SlaveID, Description) VALUES(10,'Quickly');

這工作正常。但是,如果 Master 沒有 0 MasterID 怎麼辦。然後你會得到:

Msg 547, Level 16, State 0, Line 15
The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Slave__MasterID__3943762B". 
The conflict occurred in database "TEST", table "dbo.Master", column 'MasterID'.

有一個WITH NOCHECK選項(在 SQL Server 中)允許您在主表中不存在所需數據的情況下創建外鍵。同樣,可以禁用和啟用外鍵約束,但我建議不要在任何正常情況下這樣做。這定義在:

http://technet.microsoft.com/en-us/library/ms177463(v=sql.105).aspx

引用自:https://dba.stackexchange.com/questions/50481