DEFINIR UNE CONTRAINTE D'UNICITE

Résolu
issousam Messages postés 17 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 3 septembre 2008 - 27 août 2008 à 16:38
issousam Messages postés 17 Date d'inscription mardi 4 mars 2008 Statut Membre 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

2 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
27 août 2008 à 20:48
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
3
issousam Messages postés 17 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 3 septembre 2008
28 août 2008 à 12:17
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 !!!
0
Rejoignez-nous