2009-09-30 3 views
3

L'instruction INSERT était en conflit avec la contrainte CHECK "ck_str_member_no". Le conflit s'est produit dans la base de données "C: \ DOCUMENTS ET PARAMÈTRES \ KARTHIKEYAN \ DESKTOP \ KOK \ DB \ INFT3009_ASS1_C3104855.MDF", table "dbo.Members", colonne 'str_member_no'. La déclaration a été terminée. J'utilise le fichier .MDF dans mon visual studio 2008 Express. Comment puis-je le résoudre?Erreur de serveur SQL: L'instruction INSERT était en conflit avec la contrainte CHECK

Mon insert Procédure:


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 

Tableau structure:

  • str_member_no, varchar (6), non contrôlé
  • str_member_name, varchar (50), non contrôlé
  • str_member_password, varchar (10), non contrôlé
  • str_addr_apartment_no, varchar (10), Analyse
  • str_addr_building_name, varchar (50), Analyse
  • str_addr_street_name, varchar (50), Analyse
  • int_postal_code, int, vérifié
  • str_country_name, varchar (50), vérifié
  • int_contact_no, int, vérifié
  • str_email_addr, varchar (100), Décochée
  • date_registration, date, décochée

    Unchecked 
    
+0

S'il vous plaît Mettez votre script de création de table et instruction Insert aussi il sera plus facile à comprendre .. –

+0

Êtes-vous quelque chose comme, Unique, Clé primaire à str_member_no? –

Répondre

10

De toute évidence, votre insertion enfreint une contrainte de vérification.Ceci est une contrainte dans votre base de données qui effectue une vérification spécifique - qu'une valeur numérique est dans une plage particulière, qu'une chaîne a au plus n caractères, ou autre chose.

Pour savoir ce que la contrainte de vérification est, essayez ceci:

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

Cela vous donnera l'expression qui est en cours de vérification dans la colonne « définition ». À partir de cette expression, vous devriez être en mesure de déterminer pourquoi votre insertion est rejetée. Corrigez le problème et insérez-le à nouveau.

Si vous ne pouvez vraiment pas fixer vos données, et si vous n'avez pas besoin/voulez que la contrainte de contrôle en place, vous pouvez déposer:

ALTER TABLE dbo.Members 
    DROP CONSTRAINT ck_str_member_no 

Marc

+0

Merci .. ce fut très utile :) Je ne sais pas pourquoi la contrainte que je cherchais ne s'affiche pas dans la même table, mais au moins quand VS jette l'exception SQL je peux Recherchez la contrainte de vérification dans le Studio Managmeent – Jedidja

2

Apparemment, l'INSERT fournit une valeur pour la colonne 'str_member_no' qui SQL a été chargé de refuser étant donné la contrainte CHECK. Une contrainte de vérification est simplement une condition imposée à une ou plusieurs valeurs de champs, avant qu'elles puissent être ajoutées ou insérées. Par exemple, peut-être que la commande CHECK exige que tous les str_member_no soient plus de 1500 (les valeurs les plus basses étant utilisées, par exemple, administators ...) ou une autre "règle métier" étrange. En inspectant ou en publiant ici le DDL pour la création de la table sous-jacente, ainsi que l'instruction INSERT en question, vous pouvez obtenir une compréhension spécifique de ce qui ne va pas avec la valeur (ou avec le prédicat check).

En lisant le code ajouté dans la question, str_member_no ne semble pas être vérifié, alors il se peut que la valeur passée soit trop longue ou nulle ou une autre raison générique pour la refuser; l'erreur serait typiquement différente mais comme il y a une vérification, l'erreur affichée est basée sur l'hypothèse que la vérification [personnalisée] a échoué. Dans tous les cas, vous devriez vérifier quelles valeurs sont passées à AddNewAGCMember() StoredProcedure; le problème réside probablement là, dans une valeur de champ qui est "mauvaise".

+0

@mjv je dint obtenez-vous – Anuya

Questions connexes