当前位置: 首页 > 面试题库 >

SQL Server错误:INSERT语句与CHECK约束冲突

应瀚
2023-03-14
问题内容

INSERT语句与CHECK约束“ ck_str_member_no”冲突。在数据库“ C:\ DOCUMENTS AND SETTINGS \
KARTHIKEYAN \ DESKTOP \ KOK \ DB \ INFT3009_ASS1_C3104855.MDF”的表“
dbo.Members”的列“ str_member_no”中发生了冲突。该语句已终止。

我在Visual Studio 2008 Express中使用.MDF文件。我该如何解决?

我的插入程序:

ALTER PROCEDURE [dbo].[AddNewAGCMember] 
  -- Add the parameters for the stored procedure here
  @str_member_no varchar(6) = '', 
  @str_member_name varchar(50) = '',
  @str_member_password varchar(10) = '',    
  @str_addr_apartment_no varchar(10) = NULL,    
  @str_addr_building_name varchar(50) = NULL,   
  @str_addr_street_name varchar(50) = NULL, 
  @int_postal_code int = NULL,  
  @str_country_name varchar(50) = NULL, 
  @int_contact_no int = NULL,   
  @str_email_addr varchar(100) = '',    
  @date_registration date = ''  
AS
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;

  -- Insert statements for procedure here
  INSERT INTO Members 
    (str_member_no,
     str_member_name,
     str_member_password,
     str_addr_apartment_no,
     str_addr_building_name,
     str_addr_street_name,
     int_postal_code,
     str_country_name,
     int_contact_no,
     str_email_addr,
     date_registration) 
  VALUES
    (@str_member_no, 
     @str_member_name,
     @str_member_password,
     @str_addr_apartment_no,
     @str_addr_building_name,
     @str_addr_street_name,
     @int_postal_code,
     @str_country_name,
     @int_contact_no,
     @str_email_addr,
     @date_registration);
END

表结构:

  • str_member_no,varchar(6),未选中
  • str_member_name,varchar(50),未选中
  • str_member_password,varchar(10),未选中
  • str_addr_apartment_no,varchar(10),已检查
  • str_addr_building_name,varchar(50),已检查
  • str_addr_street_name,varchar(50),已检查
  • int_postal_code,int,已检查
  • str_country_name,varchar(50),已检查
  • int_contact_no,int,已检查
  • str_email_addr,varchar(100),未选中
  • date_registration,日期,未选中
    Unchecked
    

问题答案:

显然,您的插入内容违反了检查约束。这是数据库中的一个约束,它会执行特定的检查-数值是否在特定范围内,字符串的长度最多为n个字符或任何其他形式。

要找出检查约束是什么,请尝试以下操作:

SELECT
name, definition 
FROM
    sys.check_constraints
WHERE
    name = 'ck_str_member_no'

这将为您提供在“定义”列中正在检查的表达式。

通过该表达式,您应该能够确定插入被拒绝的原因。解决该问题,然后再次插入。

如果您确实无法修复数据,并且不需要/不需要该检查约束,则可以将其删除:

ALTER TABLE dbo.Members
   DROP CONSTRAINT ck_str_member_no

马克



 类似资料:
  • 问题内容: 我收到以下错误。请你帮助我好吗? 消息547,级别16,状态0,第1行 INSERT语句与FOREIGN KEY约束“ FK_Sup_Item_Sup_Item_Cat”发生冲突。在数据库“ dev_bo”的表“ dbo.Sup_Item_Cat”中发生了冲突。该语句已终止。 代码: 最后一列是导致该错误的原因。我试图将已经存在的值放入对应于sup_item的列中。 问题答案: 在您的

  • 为什么向表添加外键会导致此错误? ALTER TABLE语句与外键约束“FK_utbldomare_upersn_u5f7e2dac”冲突。冲突发生在数据库“almu0004”、表“dbo.tblBana”、列“BanNR”中。 密码

  • 问题内容: 我的问题是每个插入中都有错误 操作数类型冲突:int与日期不兼容 如何解决这个问题? 也在这里 … 消息547,级别16,状态0,第1行INSERT语句与FOREIGN KEY约束“ FK__crew__emp_num__0F975522”发生冲突。数据库“ melisa”的表“ dbo.employee”的列“ emp_num”中发生了冲突。这张桌子上有错误 问题答案: 此表达式是一

  • 问题内容: 在MS2000中工作,我有一个名为JobOwners的表,该表将Jobs(JPSID)映射到拥有它们的雇员(EmpID)。它还包含他们开始拥有该工作的日期(DateStarted),他们停止拥有该工作的日期(DateEnded)以及所有权是否处于活动状态(IsActive)。看起来像这样。 尽管没有活动的重复应该没问题,但不应有活动的JPSID重复。通过一些研究,我发现可以使用CHEC

  • 在更新实体框架中的数据库时,代码首先迁移,我得到以下错误: ALTER TABLE语句与FOREIGN KEY约束“FK_dbo.Clients_dbo.MedicalGroups_MedicalGroupId”冲突。冲突发生在数据库“hrbc”、表“dbo.医疗组”、列“id”中。 这是我的班级: 这是我的第二堂课: 这是我正在尝试应用的迁移:

  • SQL CHECK 约束 CHECK 约束用于限制列中的值的范围。 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。 CREATE TABLE 时的 SQL CHECK 约束 下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 CHECK 约束。CHECK 约束规定 "