簡體   English   中英

Sql server錯誤:INSERT語句與CHECK約束沖突

[英]Sql server error : The INSERT statement conflicted with the CHECK constraint

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,Checked
  • str_country_name ,varchar(50),已選中
  • int_contact_no ,int,Checked
  • str_email_addr ,varchar(100),未選中
  • date_registration ,date,Unchecked

     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

顯然,INSERT為列'str_member_no'提供了一個值,在指定CHECK約束的情況下,SQL已被指示拒絕該列。 檢查約束只是在添加或插入字段之前強加於一個或多個字段值的條件。 例如,可能CHECK要求所有str_member_no都超過1500(較低的值用於管理員......)或其他一些奇怪的“業務規則”。

通過檢查或發布此處的基礎表創建的DDL以及相關的INSERT語句,您可以了解該值(或檢查謂詞)的錯誤。

讀取問題中添加的代碼,似乎沒有檢查str_member_no,那么它可能只是傳遞的值太長或為null或拒絕它的其他一般原因; 錯誤通常會有所不同,但由於有檢查,顯示的錯誤是基於[自定義]檢查失敗的假設。

無論如何,你應該檢查傳遞給AddNewAGCMember()StoredProcedure的值; 問題可能在那里,在一個“壞”的字段值。

檢查以下尚未解決的MySQL錯誤 -

MySQL CHECK約束錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM