IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[SQL SERVER 2008 R2] Contrainte CHECK


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut [SQL SERVER 2008 R2] Contrainte CHECK
    Bonsoir à tous, voila je suis entrain de developpez un petite application (Video Club Manager) avec C# sous Visual Studio 2010 qui intéragie avec MS SQL Server 2008 R2.
    Lors de la création de la BD j'ai voulu ajoute la contrainte check suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE DVD ADD CONSTRAINT c CHECK (type in ('Film','Serie','Clip','Documentaire','Autre'));
    et voila l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Major Error 0x80040E14, Minor Error 25501
    > ALTER TABLE DVD ADD CONSTRAINT c CHECK (type in ('Film','Serie','Clip','Documentaire','Autre'))
    There was an error parsing the query. [ Token line number = 1,Token line offset = 34,Token in error = CHECK ]
    voila quelque captures:




  2. #2
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Essaye avec l'option WITH NOCHECK

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE DVD WITH NOCHECK ADD CONSTRAINT c CHECK (type IN ('Film','Serie','Clip','Documentaire','Autre'));
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    Essaye avec l'option WITH NOCHECK

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE DVD WITH NOCHECK ADD CONSTRAINT c CHECK (type IN ('Film','Serie','Clip','Documentaire','Autre'));
    merci mais toujours rien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Major Error 0x80040E14, Minor Error 25501
    > ALTER TABLE DVD WITH NOCHECK ADD CONSTRAINT c CHECK (type IN ('Film','Serie','Clip','Documentaire','Autre'))
    There was an error parsing the query. [ Token line number = 1,Token line offset = 17,Token in error = WITH ]

  4. #4
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    j'ai aussi essayé la contrainte "clé étrangère" ça marche pas !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table location add constraint fk_numcarte foreign key num_carte references client(num_carte) on delete cascade;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Major Error 0x80040E14, Minor Error 25501
    > alter table location add constraint fk_numcarte foreign key num_carte references client(num_carte) on delete cascade
    There was an error parsing the query. [ Token line number = 1,Token line offset = 61,Token in error = num_carte ]

  5. #5
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Que donne ces commandes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT SERVERPROPERTY('ProductVersion') AS ProductVersion
    ,SERVERPROPERTY('ProductLevel') AS ProductLevel
    ,SERVERPROPERTY('Edition') AS Edition
    ,SERVERPROPERTY('EngineEdition') AS EngineEdition
    Il y a eu une discussion qui se rapproche un peu à ton problème ici
    Etienne ZINZINDOHOUE
    Billets-Articles

  6. #6
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    merci et voila le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Major Error 0x80040E14, Minor Error 25921
    > SELECT SERVERPROPERTY('ProductVersion') AS ProductVersion
    ,SERVERPROPERTY('ProductLevel') AS ProductLevel
    ,SERVERPROPERTY('Edition') AS Edition
    ,SERVERPROPERTY('EngineEdition') AS EngineEdition
    The function is not recognized by SQL Server Compact Edition. [ Name of function = SERVERPROPERTY,Data type (if known) =  ]

  7. #7
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    C'est ce que je pensais. Vous travaillez sur SQL Server Compact Edition. Et il me semble que cette version impose des limitations.

    Par exemple l'option "WITH NOCHECK" n'est pas supportée !

    Celà veut dire que l'ajout de la contrainte CHECK sans l'option "WITH NOCHECK" impose la vérification en amont des valeurs existantes pour la colonne type de la table DVD.

    une idée pour contourner le pb : DROP / CREATE de la table DVD
    Etienne ZINZINDOHOUE
    Billets-Articles

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    C'est ce que je pensais. Vous travaillez sur SQL Server Compact Edition.
    Ça apparaissait dans la première capture d'écran

  9. #9
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Ça apparaissait dans la première capture d'écran
    Désolé
    Etienne ZINZINDOHOUE
    Billets-Articles

  10. #10
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    j'ai encore besin de vous c'est trés urgent car je doit remétre ce tp ce jeudi

    bon j'ai réussi a faire le clé étrangère vous voyez la lésion entre les tables.
    j'ai un big problème quand je j'assy de supprimé une ligne de DVD ou de Client
    voila le message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Major Error 0x80040E35, Minor Error 0
    > delete from dvd where num_dvd=1
    The specified index does not exist. [ UQ__location__0000000000000276 ]
    par contre si je modifie le schéma de location en ajoutant la contrainte unique au (num_carte,num_dvd) qui sont déjà comme clé primaire. la suppression d'une ligne de DVD ou de Client fonction parfaitement. mais il me cause problème lorsque un même client loue deux DVD a la foi (je trouve ça logique puisque j'ai num_carte qu'est unique)

  11. #11
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par nadjibnet Voir le message
    par contre si je modifie le schéma de location en ajoutant la contrainte unique au (num_carte,num_dvd)
    [...]
    mais il me cause problème lorsque un même client loue deux DVD a la foi (je trouve ça logique puisque j'ai num_carte qu'est unique)
    Non, c'est le couple (num_carte,num_dvd) qui doit être unique.Sinon votre client ne pourrait non seulement pas louer deux DVD à la fois, mais même pas en deux fois. En fait il ne pourra utiliser sa carte qu'une seule fois

    Vous devriez même avoir une unicité sur (num_carte,num_dvd, dateLoc), afin qu'un client puisse louer deux fois le même DVD à des moments différents...

  12. #12
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Non, c'est le couple (num_carte,num_dvd) qui doit être unique.Sinon votre client ne pourrait non seulement pas louer deux DVD à la fois, mais même pas en deux fois. En fait il ne pourra utiliser sa carte qu'une seule fois

    Vous devriez même avoir une unicité sur (num_carte,num_dvd, dateLoc), afin qu'un client puisse louer deux fois le même DVD à des moments différents...
    merci mais tu ne m'a pas compris, le couple(num_carte,num_dvd) ils sont unique pcq ils sont comme clé primaire. Mon problème c'est: après l'ajout d'un client par exemple je veux le supprimer je reçois une erreur mais quand j'ajoute la contrainte unique a la table location de l'attribut num_carte la suppression ce fait. mais logiquement j'aurai un problème dans l'ajout de location "Un client ne peux pas louer un autre dvd jusque ce que je supprime sa location (il rend le dvd loué)". Donc je doit garder mon 1er carte ça c'est sure mais il faut que je résou le problème de suppression.

    note: la méme chose s'applique pour la suppression d'un dvd.

  13. #13
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    1/ pouvez vous poster la requete complète de suppression que vous tentez d'exécuter

    2/ pouvez-vous essayez d'exécuter
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DBCC FREEPROCCACHE
    et de réessayer ensuite votre requete de suppression, et nous dire ce que cela donne

  14. #14
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    1/
    Requette SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM [client] WHERE (([num_carte] = @num_carte))
    Appel de la méthode Delete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClientTableAdapter.DeleteDecimal.Parse(Tb_NumCarte.Text));
    ps: La suppression d'un tuple depuis la table location fonction correctement avec la même manière c'est pour DVD et Client que le problème décrit précédemment se pose.

    2/
    Message d'erreur de la requette que tu m'a demander d’exécuter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Major Error 0x80040E14, Minor Error 25501
    > DBCC FREEPROCCACHE
    There was an error parsing the query. [ Token line number = 1,Token line offset = 1,Token in error = DBCC ]

  15. #15
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    il faut d'abord supprimer les lignes dans les tables FILLES (tables ayant les clés étrangères) avant la suppression dans la table PARENT
    Etienne ZINZINDOHOUE
    Billets-Articles

  16. #16
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 106
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    il faut d'abord supprimer les lignes dans les tables FILLES (tables ayant les clés étrangères) avant la suppression dans la table PARENT
    merci. Oui bien-sure.

    Bon je viens de résoudre mon problème, j'ai supprimé la table location ainsi que tous ses contraints, je les recrée et j'ai crée les contraintes des clés étrangères graphiquement avec le Date Set Designer .

    donc tous fonctionne comme je les voulu ...Hamdoullah(Je remercie dieu)

    Merci a tous qui mon soutenue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL Server 2008 : les nouveautés . . .
    Par SQLpro dans le forum MS SQL Server
    Réponses: 51
    Dernier message: 12/05/2010, 16h10
  2. Problème lors de l'installation de SQL SERVER 2008
    Par MedSabri dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 19/03/2008, 11h55
  3. type geography dans sql server 2008
    Par skandarghorbel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/02/2008, 15h28
  4. Erreur Installation SQL Server 2008 Katmai
    Par jowsuket dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 25/01/2008, 11h40
  5. Date officielle de la sortie de SQL Server 2008
    Par snoopy69 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/09/2007, 18h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo