SQL服务器错误: The INSERT statement conflicted with the CHECK constraint

标签 sql sql-server tsql

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

马克

关于SQL服务器错误: The INSERT statement conflicted with the CHECK constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1496048/

相关文章:

sql-server - 我可以同时选择和更新吗?

sql-server - 使用 newid() 作为随机源的 T-SQL Case 语句奇怪的行为

sql - 使用不确定数量的参数时如何避免动态 SQL?

sql - 如何判断一个员工是不是经理?

sql - 如何选择特定字段中包含 4 位数字/字符的记录?

c# - 将特殊字符(如 ' 或 +)插入 Access 数据库

sql-server - 从 SQL Server 2005 DB 选择数据到 Azure 中的 Azure SQL 临时数据库表

sql - 是否可以在不使用存储过程或函数的情况下生成 X # 行?

php - 唯一键、INSERT IGNORE 和表分区

mysql - 在 WHERE 子句中找不到列 r.user_id