0

我正在尝试添加一个不会应用于现有记录的检查约束。我的尝试是:

ALTER TABLE myDB.dbo.myTable 
  ADD CONSTRAINT myConstraintName WITH NOCHECK (dbo.myFunction() = 0);

返回

消息 156,级别 15,状态 1,第 1 行
关键字“with”附近的语法不正确。
消息 319,级别 15,状态 1,第 1 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式、xmlnamespaces 子句或更改跟踪上下文子句,则前面的语句必须以分号结束。

我还试图掌握 T-SQL 语法图的窍门。基于alter table语法和 T-SQL约定,我似乎按照下图所示的方式遵循语法图中的开关 - 导致 label <table_constraint>。我将其解释为 table_constraint 附加图表的标签。

  1. 如何修复 T-SQL 语句中的语法?

  2. 我是否正确解释了图表?

在此处输入图像描述

4

1 回答 1

2

WITH NOCHECK需要在 ALTER TABLE 语句之后,并且需要 aCHECK来指示约束类型。

ALTER TABLE myDB.dbo.myTable with NOCHECK ADD CONSTRAINT myConstraintName CHECK (dbo.myFunction() = 0);

然后,您可以稍后检查约束

ALTER TABLE myDB.dbo.myTable CHECK myConstraintName

于 2013-04-11T19:46:10.790 回答