外键的默认值可以等于 0 吗?

har*_*hal 2 foreign-key

我有一个默认值为 0 的列。我可以将该列设为外键吗

RLF*_*RLF 7

是的,您可以将默认值为 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');
Run Code Online (Sandbox Code Playgroud)

这工作正常。但是,如果 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'.
Run Code Online (Sandbox Code Playgroud)

有一个WITH NOCHECK选项(在 SQL Server 中)允许您在主表中不存在所需数据的情况下创建外键。同样,可以禁用和启用外键约束,但我建议不要在任何正常情况下这样做。这在以下位置定义:

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