是的,您可以将默认值为 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
| 归档时间: |
|
| 查看次数: |
9500 次 |
| 最近记录: |