如何为每个外键添加多个nocheck?

时间:2019-01-06 14:53:50

标签: sql sql-server

我需要为不同的字段创建多个fk,并且每个fk均不选中,

我看到的所有示例一次只适用于1 fk,

我需要这样的东西:

 ALTER TABLE contact  
WITH NOCHECK ADD CONSTRAINT [FK_check5] 
           FOREIGN KEY (accountid) REFERENCES dbo.account ([accountid]),

WITH NOCHECK ADD CONSTRAINT [FK_check6] 
           FOREIGN KEY (roleid) REFERENCES dbo.role ([id])

残疾人必须在创建级别,而不是在创建级别

2 个答案:

答案 0 :(得分:3)

将您的alter table语句分成两个

ALTER TABLE contact  
WITH NOCHECK ADD CONSTRAINT [FK_check5] 
           FOREIGN KEY (accountid) REFERENCES dbo.account ([accountid]);

ALTER TABLE CONTACTS
WITH NOCHECK ADD CONSTRAINT [FK_check6] 
           FOREIGN KEY (roleid) REFERENCES dbo.role ([id]);

答案 1 :(得分:2)

“ NoCheck”将应用于您在语句中添加的所有约束,您无需重复:

下面的示例(在SQL 2012中测试):

CREATE TABLE account (accountid int, PRIMARY KEY (accountid))
GO

CREATE TABLE [role] (id int, PRIMARY KEY (id))
GO

CREATE TABLE contact (accountid int, roleid int)
GO

insert into contact values (1,1)
GO

ALTER TABLE contact
    WITH NOCHECK 
    ADD 
     CONSTRAINT [FK_check5] FOREIGN KEY (accountid) REFERENCES [account] ([accountid])
    ,CONSTRAINT [FK_check6]  FOREIGN KEY (roleid) REFERENCES [role] ([id])

如果您打算仅使用外键进行ER绘图,则可以关闭约束的强制执行。有关更多信息,请参见下面的文章。

https://docs.microsoft.com/en-us/sql/relational-databases/tables/disable-foreign-key-constraints-with-insert-and-update-statements

按照文章中提供的示例:

USE AdventureWorks2012;  
GO  
ALTER TABLE Purchasing.PurchaseOrderHeader  
NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
GO  

话虽如此,我建议您不要在生产系统中持续进行此操作。存在外键约束是出于某种原因,以维护数据完整性。如果您以违反外键约束的方式插入数据,则可能需要查看数据设计。