Sei sulla pagina 1di 7

/*-------------- 01 -------------*/

use master;
go
create database COMMER
on
(name='com_dat',
filename='d:\TPSQL\Com_Dat.mdf',
size=5,
maxsize=25)
log on
(Name='com_log',
filename='d:\TPSQL\Com_Log.ldf',
size=10,
maxsize=50)
go
/*------------- 02 -------------*/
create table BE
(NumBE varchar(5) primary key,
DateBE datetime,
CodeFour Varchar(5))
create table BS
(NumBS varchar(5) primary key,
DateBS datetime,
CodeDem Varchar(5))
create table Contient1
(NumBS varchar(5),
CodeProd varchar(5),
QteS real
constraint CleDouble1 primary key
(NumBS,CodeProd))
create table Contient2
(NumBE varchar(5),
CodeProd varchar(5),
QteE real
constraint CleDouble2 Primary key
(NumBE,CodeProd))

create table Produit


(CodeProd varchar(5) primary key,
NomProd varchar(15),
PU real,
UniteMesure varchar(5),
Qte integer)
create table Fournisseur
(CodeFour varchar(5) primary key,
RaisSoc varchar(15),
Adresse varchar(20),
créance real)
create table Demandeur
(CodeDem varchar(5) primary key,
NomDem varchar(15),
PrenomDem varchar(15),
Poste varchar(15),
Departement varchar(15))

alter table BE
add constraint CLET1 foreign key
(CodeFour) references Fournisseur(CodeFour)
alter table BS
add constraint CLET2 foreign key
(CodeDem) references Demandeur(CodeDem)
alter table Contient1
add constraint CLET3 foreign key
(NumBS) references BS(NumBS)
alter table Contient1
add constraint CLET4 foreign key
(CodeProd) references Produit(CodeProd)
alter table Contient2
add constraint CLET5 foreign key
(NumBE) references BE(NumBE)
alter table Contient2
add constraint CLET6 foreign key
(CodeProd) references Produit(CodeProd)

/*--------------- 03 -------------*/
create rule Sup as @a>0
exec sp_bindrule sup,'Contient1.QteS'
exec sp_bindrule sup,'Contient2.QteE'
exec sp_bindrule sup,'Produit.Qte'
exec sp_bindrule sup,'Produit.PU'
exec sp_bindrule sup,'Fournisseur.Créance'
/*------------ 04 --------------*/
alter table Fournisseur
add constraint A1 unique
(Adresse)
/*------------ 05 -----------------*/
alter table BE
add constraint A2 unique
(DateBE)
/*----------- 06 ---------------*/
alter table contient1
add constraint A3 unique
(NumBS)
/*----------- 07 --------------*/
create procedure PRO1
as
(select count(CodeProd) as Nbr_Total,NumBE
from contient2
group by NumBE)

/*Test :*/
insert into contient2 values('BE003','P0002',10)
exec Pro1
/*------------ 08 ----------------*/
create procedure PRO2
@NBS varchar(5)
as
(select count(CodeProd)
from contient1
Where NumBS=@NBS)
/*Test :*/
exec Pro2 'BS002'
/*------------ 09 ------------------*/
create function F1(@Qt int)
returns table as return
(select NomProd,'NIVEAU_STOCK'=case
when Qte >@Qt then 'Quantite sicurisée'
when Qte <=@Qt then 'ALERT !!!'
end
from produit)
drop function F1
/*test :*/
select * from F1(10)

/*------------ 10 -------------------*/
create trigger T1 on Contient1 for insert
as
if ((select QteS from inserted I,Produit P where I.CodeProd=P.CodeProd)>(select
Qte from Produit P,Inserted I where I.codeprod=P.codeprod))
begin
print 'QUANTITE INSUFFISANTE !!!!!'
rollback transaction
end
/*Test :*/
insert into contient1 values('BS004','P0001',100)
drop trigger T1
/*----------- 11 -----------------*/
create trigger T2 on Contient1 for insert
as
if ((select QteS from inserted I,Produit P where I.CodeProd=P.CodeProd)-(select
Qte from Produit P,Inserted I where I.codeprod=P.codeprod))<(10)
begin
print 'Qte en stock inferrieur a 10'
end
/*test :*/
insert into contient1 values('BS004','P0001',20)
drop trigger T2
/*----------- 12 ------------*/
create trigger T3 on BS for delete
as
begin
raiserror('SUPPRESSION INTERDITE !!!!!',16,10)
rollback transaction
end
/*test :*/
delete from BS where CodeDEM='D0003'
/*-------------------------------*/
insert into Contient1 values('BS001','P0002',15)
/*-------------- 13 ------------*/
create trigger T44 on produit for insert
as
if(select count(*) from inserted)>2
begin
print'PAS PLUS DE DEUX ENTREES A LA FOIS !!!'
rollback transaction
end

/* Test :*/
insert into Produit
select * from produit1
/*--------------- 14 -----------------*/
create trigger T5 on Produit for update
as
if (substring(columns_updated(),1,1)=power(2,2))
print 'DOMMAGE POUR L''AUGMENTATION'

/*test :*/
update produit
set pu=pu
/* -------------15------------------*/
/*1*/
select NumBE
from contient2
group by NumBE
having count(CodeProd)>=All (select count(CodeProd)
From contient2
group by NumBE)

/*2*/
select distinct NumBS
from Contient1 C1
where not exists(select null
from Produit P
Where NomProd like 'P%' and
not exists(select null
from Contient1 C2
where C2.CodeProd=P.codeProd and C2.NumBS=C1.NumBS))

/*3*/
select NumBE
from Contient2 C,Produit P
where C.codeprod=P.codeProd and
P.PU=(select max(PU)
from Contient2 C1,Produit P1
where C1.Codeprod=P1.codeProd)

/*4*/
select CodeFour
from BE
group by CodeFour
having count(NumBE)>=all(select count(NumBE)
From BE
Group by CodeFour)
/*5*/
select CodeDem
from BS B,Contient1 C
where B.NumBS=C.numBS
group by codeDem
having count(CodeProd)<=all (select count(CodeProd)
from BS B1,Contient1 C1
where B1.numBS=C1.numBS
group by Codedem)
/*6*/
select Departement
from Demandeur D,BS B
where D.Codedem=B.codedem
group by Departement
having count(NumBs)>=all(select count(NumBS)
from Demandeur D1,BS B1
where D1.CodeDem=B1.codeDem
group by Departement)
/*7*/
select count(*),poste
from demandeur
group by poste
having count(*)>=all(select count(*)
from demandeur
group by poste)

/*8*/
select count(Poste)as Nombre_Poste,Departement
from Demandeur
group by Departement
/*9*/
select UniteMesure,count(CodeProd)as Nombre_Produit
from Produit
group by UniteMesure
having count(CodeProd)>=all(select count(CodeProd)
from Produit
Group by UniteMesure)
/*10*/
select codeProd
from contient2
group by codeProd
having count(NumBE)<=all (select count(NumBE)
from Contient2
group by codeProd)

/*-------------16------------------*/
create view V1 as
select NumBS,CodeProd
from Contient1

select * from V1
/*-------------17-------------------*/
create function F2()
returns table
as return(select Departement,count(codeDem) as Nmbr_Demandeur
from demandeur
Group by Departement)
select * from F2()
/*-------------18-----------------*/
create function F3()
returns table as return
(select Departement
from Demandeur
group by departement
having count(CodeDem)>= all (select count(CodeDem)
from Demandeur
group by departement))
select * from F3()
/*------------- 19 ------------------*/
create function F4()
returns table as return
(select NomProd,PU
from produit
where PU=(select max(PU)
from produit))
select * from F4()
/*-------------- 20 ---------------------*/
create function F5()
returns table as return
(select Sum(PU*Qte)as TOTAL_STOCK
from produit)
select * from F5()

Potrebbero piacerti anche