Conception Et Réalisation (SQL Server) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

COLLATE

Permet de définir un classement pour la colonne qui est différent de celui de la base de

données.

NULL, NOT NULL

Permettent de définir une contrainte de nullité ou de non-nullité sur une colonne existante de

la table.

CHECK, NOCHECK

Permettent d’activer et de désactiver des contraintes d’intégrité.

ENABLE, DISABLE

Permettent d’activer et de désactiver l’exécution des déclencheurs associés à la table.

L'ordre ALTER sur une table permet de :

• Supprimer une colonne

• Supprimer une contrainte

• Ajouter une colonne

• Ajouter une contrainte

• Ajouter une contrainte de ligne DEFAULT

Il ne permet pas de :

58

• Changer le nom d'une colonne

• Changer le type d'une colonne

• Ajouter une contrainte de ligne NULL / NOT NULL

Quelques exemples :

--Ajout d'une colonne

ALTER TABLE Clients ADD CODEREP char(2) null;

--Modification d'une colonne existante

ALTER TABLE Clients

ALTER COLUMN Telephone char(14) not null;

--Ajouter une clé primaire sur la colonne COLONNE1

ALTER TABLE MATABLE1

ADD CONSTRAINT PK_PRIMARY

PRIMARY KEY (COLONNE1)

--Ajouter une clé étrangère à la table LIGCOM

ALTER TABLE LIGCOM

ADD CONSTRAINT FK_LIGCOM_COMPORTER_ENTCOM foreign key (NUMCOM)

REFERENCES ENTCOM (NUMCOM)

GO

/* La contrainte FOREIGN KEY, basé sur la colonne NUMCOM référence le champ

NUMCOM de la table ENTCOM pour garantir que toutes lignes de commandes est

associé à un numéro de commande */

-- Ajout d'une contrainte

ALTER TABLE Clients

ADD CONSTRAINT ck_cpo check(codepostal between 1000 and 95999);

Pour revenir à notre base de données « PAPYRUS ». Pour modifier le type de la colonne

DATCOM de la table ENTCOM.

--Modification de la colonne DATCOM

ALTER TABLE ENTCOM

ALTER COLUMN DATCOM smalldatetime not null;

On procédera de la même manière pour les différents types à modifier. On définira null ou not

null pour la contrainte de nullité.

Définissons également les contraintes répondant à l’énoncé du problème : « Le numéro de

commande est un champ compteur auto incrémenté de 1 ». Si vous souhaitez effectuer

cette action par le code, vous devez supprimer puis recréer votre table en utilisant IDENTITY

(1,1).

CREATE TABLE ENTCOM

(NUMCOM INT NOT NULL IDENTITY(1,1),

NUMFOU INT NOT NULL,

OBSCOM VARCHAR(25) NOT NULL,

DATCOM DATE NOT NULL,

CONSTRAINT PK_NUMCOM PRIMARY KEY (NUMCOM));

« La date de commande est par défaut la date du jour ». Pour la colonne DATCOM on

utilisera la formule getdate().

ALTER TABLE ENTCOM

ADD CONSTRAINT DATCOM CHECK (DATCOM = getdate());

59

index-60_1.png

index-60_2.png

Le problème, c’est que nous avons contraint notre colonne à la date du jour. Il n’est par

conséquent pas possible de saisir une autre date que la date du jour alors que si nous

utilisons le code suivant :

ALTER TABLE ENTCOM

ADD CONSTRAINT DATCOM DEFAULT (getdate()) FOR DATCOM;

La colonne proposera la date du jour, mais celle-ci sera alors modifiable.

« L’indice de satisfaction est compris dans une échelle de 1 à 10 ».

ALTER TABLE ENTCOM

ADD CONSTRAINT SATISFT CHECK (SATISF >= 1 AND SATISF <= 10);

« Le code postal est constitué de 5 chiffres ».

ALTER TABLE FOURNISSEUR

ADD CONSTRAINT POSFOU CHECK (POSFOU like ('[0-9][0-9][0-9][0-9][0-9]'));

Nous allons modifier les contraintes des tables LIGCOM, PRODUIT et VENDRE de façon à ce

que lorsque nous modifierons le code d’un produit de la table PRODUIT (à l’aide d’une

instruction UPDATE), la mise à jour se reporte automatiquement sur les tables LIGCOM et

VENDRE. Pour cela nous spécifions la règle de mise à jour « En cascade ».

USE Papyrus

ALTER TABLE vente.LIGCOM

ADD CONSTRAINT FK_LIGCOM_UPDATE FOREIGN KEY (CODART)

REFERENCES vente.PRODUIT (CODART)

ON UPDATE CASCADE

USE Papyrus

ALTER TABLE vente.VENDRE

ADD CONSTRAINT FK_VENDRE_UPDATE FOREIGN KEY (CODART)

REFERENCES vente.PRODUIT (CODART)

ON UPDATE CASCADE

Une fois les relations de chacune des tables modifiées, nous allons mettre à jour notre table

PRODUIT. Mettons à jour le code de l’article « I100 » par exemple.

Use Papyrus

UPDATE vente.PRODUIT

SET CODART = 'I10B'

WHERE CODART = 'I100'

Nous changeons le code de l’article en « I10B ». On enregistre les modifications et on

actualise notre base de données.

60

index-61_1.png

index-61_2.png

On interroge maintenant la table VENDRE. On constate que celle-ci a été modifiée

automatiquement.

C’est la même chose pour la table LICOM.

61

index-62_1.png

La contrainte REFERENCE traduit la liaison qui existe entre une clé primaire et étrangère de

deux tables. Il est conseillé de créer ce genre de contrainte qu’après la création de toutes les

tables impliquées, sinon, lors de la compilation de votre script, des erreurs peuvent

apparaître. Cette contrainte n’a pas de propriété particulière par défaut, il faut les ajouter soi-

même, voyons dans un premier temps sa syntaxe.