issousam
Messages postés17Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 3 septembre 2008
-
27 août 2008 à 16:38
issousam
Messages postés17Date d'inscriptionmardi 4 mars 2008StatutMembreDerniè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...
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 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.