Foreign-Key
外鍵可以有一個預設值等於 0 嗎?
我有一個預設值為 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