Sql 如何在表中的列上添加检查约束?
我尝试使用第一条语句添加check约束。它给了我下面的错误 [23000][547]ALTER TABLE语句与CHECK约束“CHK_Student_ID_LENGTH”冲突。数据库表“Student”列“ID”中发生冲突 我试图检查是否存在同名的约束。但是我没有得到任何帮助。但我还是试图放弃这个限制。但随后它给出了错误: CHK_Student_ID_长度不是约束条件Sql 如何在表中的列上添加检查约束?,sql,sql-server-2012,Sql,Sql Server 2012,我尝试使用第一条语句添加check约束。它给了我下面的错误 [23000][547]ALTER TABLE语句与CHECK约束“CHK_Student_ID_LENGTH”冲突。数据库表“Student”列“ID”中发生冲突 我试图检查是否存在同名的约束。但是我没有得到任何帮助。但我还是试图放弃这个限制。但随后它给出了错误: CHK_Student_ID_长度不是约束条件 但add constraint语句仍给出错误,表示它已经存在。我哪里出错了?错误消息的措辞有点糟糕,但没有说出你认为它在说什
但add constraint语句仍给出错误,表示它已经存在。我哪里出错了?错误消息的措辞有点糟糕,但没有说出你认为它在说什么 这并不是说已经存在同名的约束。这意味着约束被违反了。这意味着表中已有数据不符合您试图引入的新约束的要求 您可以使用创建约束,同时允许现有数据违反约束。但这往往是错误的做法。修复现有数据通常更明智
指定
NOCHECK
意味着优化器不能使用约束来消除约束逻辑可能排除的冗余操作。错误消息的措辞有点糟糕,但没有说出您认为它在说什么
这并不是说已经存在同名的约束。这意味着约束被违反了。这意味着表中已有数据不符合您试图引入的新约束的要求
您可以使用创建约束,同时允许现有数据违反约束。但这往往是错误的做法。修复现有数据通常更明智
指定
NOCHECK
意味着优化器不能使用约束来消除约束逻辑可能排除的冗余操作。表中可能有一些记录与新约束冲突
在添加约束之前,只需找到它们并进行更新/删除即可
选择*
来自学生
其中LEN([ID])介于12和14之间
或者尝试添加该约束,而不使用NOCHECK检查现有值
使用NOCHECK更改表学生
添加约束CHK_Student_ID_长度检查(LEN([ID]),介于12和14之间);
提示:在迁移文件中,我通常在添加新约束之前添加以下内容:
如果对象ID('CHK\u Student\u ID\u LENGTH')不为空
更改表学生放置约束CHK_学生ID_长度
如果对象ID(“CHK\U学生ID\U长度”)为空
ALTER TABLE学生添加约束。。。
关于
altertable
的更多信息表中可能有一些记录与新约束冲突
在添加约束之前,只需找到它们并进行更新/删除即可
选择*
来自学生
其中LEN([ID])介于12和14之间
或者尝试添加该约束,而不使用NOCHECK检查现有值
使用NOCHECK更改表学生
添加约束CHK_Student_ID_长度检查(LEN([ID]),介于12和14之间);
提示:在迁移文件中,我通常在添加新约束之前添加以下内容:
如果对象ID('CHK\u Student\u ID\u LENGTH')不为空
更改表学生放置约束CHK_学生ID_长度
如果对象ID(“CHK\U学生ID\U长度”)为空
ALTER TABLE学生添加约束。。。
更多关于
ALTER TABLE
的信息,请检查标签摘要,找出哪一个适用于您的问题。它们是两个独立的产品。错误消息来自ms sql server,而不是mysql!请注意你如何标记你的问题,否则会误导他人,造成混乱!请检查和的标签摘要,找出哪一个真正适用于您的问题。它们是两个独立的产品。错误消息来自ms sql server,而不是mysql!请注意你如何标记你的问题,否则会误导他人,造成混乱!
ALTER TABLE Student ADD CONSTRAINT CHK_Student_ID_LENGTH CHECK (LEN([ID]) between 12 and 14);
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_NAME = 'CHK_Student_ID_LENGTH';
alter table Student drop constraint CHK_Student_ID_LENGTH;