DEFINIR UNE CONTRAINTE D'UNICITE [Résolu]

issousam
Messages postés
18
Date d'inscription
mardi 4 mars 2008
Dernière intervention
3 septembre 2008
- 27 août 2008 à 16:38 - Dernière réponse : issousam
Messages postés
18
Date d'inscription
mardi 4 mars 2008
Dernière intervention
3 septembre 2008
- 28 août 2008 à 12:17
Bonjour,

Je m'adresse à vous car je debute en langage SQL et j'ai un probleme au niveau des contarintes d'unicité que je veux definir au sein des tables de ma base de données.

En effet, pour créer une contraintes d'unicite sous SQL SERVER 2005 (j'utilise MSDE 2005), en cherchant sur le net, j'ai trouve la syntaxe suivante : 
ALTER TABLE [dbo].[MaTable1] WITH NOCHECK
ADD CONSTRAINT [MaContrainteUnique] UNIQUE ( [champ1], [champ2])

Cela se fait aprés avoir créer ma table. Mais j'ai decouvert qu'il y avait deux facon de le faire : créer la contraintes lors de la creation de ma table ou le faire aprés avoir crée ma table.

J'ai donc repris les deux facons pour ma table :

******************1ere FACON**********************************
**********LORS DE LA CREATION DE LA TABLE*******************
if not exists (select * from dbo.sysobjects where id object_id(N'[dbo].[LOGICIEL]') and OBJECTPROPERTY(id, N'IsUserTable') 1)
 BEGIN
CREATE TABLE [dbo].[LOGICIEL] (
 [id_logiciel] [int] IDENTITY (1, 1) NOT NULL ,
 [nom_logiciel] [text] NOT NULL CONSTRAINT LOGICIEL_UNIQUE UNIQUE,
 [is_os] [text] NOT NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END

GO

ALTER TABLE [dbo].[LOGICIEL] WITH NOCHECK ADD
 CONSTRAINT [PK_LOGICIEL] PRIMARY KEY  CLUSTERED
 (
  [id_logiciel]
 )  ON [PRIMARY]

*****************AUTRE FACON************************
*********APRES AVOIR CREER LATABLE******************
if not exists (select * from dbo.sysobjects where id object_id(N'[dbo].[LOGICIEL]') and OBJECTPROPERTY(id, N'IsUserTable') 1)
 BEGIN
CREATE TABLE [dbo].[LOGICIEL] (
 [id_logiciel] [int] IDENTITY (1, 1) NOT NULL ,
 [nom_logiciel] [text] NOT NULL ,
 [is_os] [text] NOT NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END

GO

ALTER TABLE [dbo].[LOGICIEL] WITH NOCHECK ADD
 CONSTRAINT [PK_LOGICIEL] PRIMARY KEY  CLUSTERED
 (
  [id_logiciel]
 )  ON [PRIMARY]

ALTER TABLE [dbo].[LOGICIEL] WITH NOCHECK ADD
 CONSTRAINT UNIQUE_LOGICIEL UNIQUE
 (
  [nom_logiciel]
 )  ON [PRIMARY]

ET LE PROBLEME EST QU'AUCUNE DES DEUX FACONS NE MARCHENT,
J'ai des erreurs du type "[nom_logiciel] n'est pas un type valide lui permettant d'être utiliser en tant que colonne clé dans un index" ou du type nom_logiciel n'est pas une clé...

Je ne vois vraiment pas d'où pourrait venir le problème  donc si vous avez une idée, merci de me la communiquer...

MERCI D'AVANCE
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
nhervagault
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Dernière intervention
15 juillet 2011
- 27 août 2008 à 20:48
3
Merci
Salut,

Les contraintes uniques ne semblent pas fonctionner pour les champs de type TEXT (equivalent a du blob)  et le varchar(max)
mais sur un varchar(x) l'ajout fonctionne.

Bon coding

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de nhervagault
issousam
Messages postés
18
Date d'inscription
mardi 4 mars 2008
Dernière intervention
3 septembre 2008
- 28 août 2008 à 12:17
0
Merci
Merci pour l'info... C'est exactement ça !!!!

Je ne savais pas que ca ne marchait pas pour les types text  -> ca marche pour les types varchar ou autres!!!!

MERCI !!!
Commenter la réponse de issousam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.