1. ホーム
  2. sql

[解決済み] Sql サーバーエラー : INSERT 文は CHECK 制約と競合しています。

2022-02-19 21:23:25

質問

INSERT 文が CHECK 制約 " と競合しました。 ck_str_member_no となります。競合が発生したのは、データベース "C:\DOCUMENTS AND SETTINGS の CourierDESKTOP の CourierKOKDB の CourierINFT3009_ASS1_C3104855.MDF", table "dbo.Members", column '. 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'

これで、"definition"欄にチェックされている式が表示されるようになります。

この式から、挿入が拒否された理由を特定することができるはずです。問題を解決して、もう一度挿入してください。

どうしてもデータを修正できず、そのチェック制約が必要ない/必要な場合は、それを削除することができます。

ALTER TABLE dbo.Members
   DROP CONSTRAINT ck_str_member_no

マルク