TSQL:NOCHECK CREATE TABLE中的外键

时间:2014-09-23 16:40:21

标签: sql-server tsql

我想在我的CREATE TABLE语句中添加一个外键约束。但是,我还想包含NOCHECK属性。这可以在CREATE TABLE语句中的一次传递中完成吗?我似乎无法找到一个好的例子。

所以,比如:

CREATE TABLE dbo.SampleTable (
   [ID] INT IDENTITY (1,1) NOT NULL,
   [ParentSampleTableID] INT NOT NULL,
   <NOCHECK> CONSTRAINT [FK_SampleTable_ParentSampleTable] FOREIGN KEY (ParentSampleTableID) REFERENCES dbo.ParentSampleTable ([ID])
)

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

您无法在表定义级别添加约束和禁用。

您有两个选项

不要在表定义级别添加约束,稍后添加约束,并使用NOCHECK禁用它。

CREATE TABLE dbo.SampleTable (
   [ID] INT IDENTITY (1,1) NOT NULL,
   [ParentSampleTableID] INT NOT NULL)
GO   
ALTER TABLE dbo.SampleTable  
WITH NOCHECK ADD CONSTRAINT [FK_SampleTable_ParentSampleTable] 
           FOREIGN KEY (ParentSampleTableID) REFERENCES dbo.ParentSampleTable ([ID])
GO

在表定义级别添加约束,稍后禁用它。

CREATE TABLE dbo.SampleTable (
   [ID] INT IDENTITY (1,1) NOT NULL,
   [ParentSampleTableID] INT NOT NULL,
   CONSTRAINT [FK_SampleTable_ParentSampleTable] 
            FOREIGN KEY (ParentSampleTableID) REFERENCES dbo.ParentSampleTable ([ID])
)
GO
ALTER TABLE dbo.SampleTable NOCHECK CONSTRAINT [FK_SampleTable_ParentSampleTable]
GO