TRƯỜNG ĐẠI HỌC SƯ PHẠM KĨ THUẬT HƯNG YÊN
KHOA CÔNG NGHỆ THÔNG TIN
o0o
TIỂU LUẬN
MÔN : CƠ SỞ DỮ LIỆU NÂNG CAO
ĐỀ TÀI :QUẢN LÝ MƯỢN SÁCH
Giáo viên hướng dẫn : Trịnh Thị Nhị
Sinh viên thực hiện :
Lớp: TK6LC1
Hưng Yên, Tháng 4 năm 2010
Cho CSDL của hệ thống quản lý mượn sách với các cấu trúc bảng sau:
Bảng 1: Loaisach
STT Fieldname Data Type Fieldsize Note
1 Masach Text 4
2 Tensach Text 20
3 Tentacgia Text 20
4 Namxb Date/time 8
5 Soluongco Number 3 Số lượng có
6 Sotrang Number 5 Số trang sách
7 Manxb Text 4 Mã nhà xuất bản
Bảng 1: Docgiamuon
STT Fieldname Data Type Fieldsize Note
1 Hoten Text 30
2 Quequan Text 30
3 Madocgia Text 4
4 Masach Text 4
5 Sluong Number 1 Số lượng mượn
6 Ngaymuon Date/time 8 Ngày mượn
7 Ngayhen Date/time 8 Ngày hẹn trả
Bảng 3: Docgiatra
STT Fieldname Data Type Fieldsize Note
1 Madocgia Text 4 Khoá chính
2 Masach Text 4
3 Ngaytra Date/time 8 Ngày trả
Bảng 4: : Nhaxban
STT Fieldname Data Type Fieldsize Note
1 Manxban Text 4 Khoá chính
2 Ten_xb Text 30 Tên nhà xuất bản
3 Diachi_nxb Text 30 Địa chỉ Nhà XB
Sử dụng ngôn ngữ T - SQL thực hiện các yêu cầu sau:
Câu 1:
1. Tạo CSDL trên với các ràng buộc toàn vẹn dựa vào thực tế.
2. Nhập dữ liệu vào các bảng.
Câu 2:
3. Thêm các rang buộc và xóa các rang buộc theo yêu cầu.
4. Tạo một truy vấn TV1 để hiển thị danh sách độc giả mượn sách trong tháng 10 năm 98
bao gồm những thông tin: Hoten, ngaymuon, tensach, tentacgia.
5. Tạo một truy vấn TV2 để hiển thị số lượng còn của mỗi loại sách của nhà xuất bản
Kim đồng bao gồm những thông tin: tensach, nxban, soluongcon.
6. Tạo một truy vấn TV3 để hiển thị danh sách những độc giả mượn sách quá hạn bao
gồm những thông tin: Hoten, Ngaymuon, Ngayhen, songayqua (Số ngày quá hạn).
7. Tạo một truy vấn TV4 để hiển thị danh sách những độc giả mượn sách quá hạn bao
gồm những thông tin Hoten, sluong, mucquahan
Trong đó: Mucquahan là Mức 1 nếu songayqua<5
Mucquahan là Mức 2 nếu songayqua<10
Mucquahan là Mức 3 nếu songayqua>=10
8. Tạo một truy vấn TV5 để hiển thị danh sách những độc giả trả sách đúng hạn hoặc
sớm hạn bao gồm những thông tin: Hoten, masach, tensach.
9. Tạo một truy vấn TV6 để hiển thị những loại sách có số trang >100 và số lượng còn là
20 của nhà xuất bản giáo dục hoặc tên sách có chữ Tin học bao gồm Tensach, sotrang,
ten_xb, tentacgia.
10. Hiển thị thông tin của độc giả mượn nhiều sách nhất.
Câu 3:
Tạo ra các view (tối thiểu 3 view). So sánh bảng và view. Thực hiện tất cả các thao tác có
thể có trên view.
Câu 4:
Thiết lập chỉ mục và chỉ mục toàn văn trên bảng Docgiamuon. Ứng dụng để tìm kiếm
theo chỉ mục mà mình vừa tạo ra.
Câu 5:
Tạo ra các user (tối thiểu là 5 user), tạo ra các Role (tối thiểu là 3 role). Thực hiện gán
các user vào các role. Sau đó , thực hiện phân quyền cho các user và các role (sử dụng tất
cả các quyền).
Câu 6:
Đề xuất các chức năng của hệ thống, viết các Store procedure đáp ứng các chức năng đó.
Câu 7:
Đưa ra các yếu tố của RBTV, thiết lập các trigger thực hiện các ràng buộc toàn vẹn đó.
Câu 8:
Thực hiện việc sao lưu, phục hồi dữ liệu. Nhập/xuất dữ liệu từ SQL server sang các môi
trường khác: Excel, Access và ngược lại.
Sử dụng Windows Forms Application trong VS8 xây dựng 1 form, thực hiện việc truy
xuất dữ liệu của SQL server.
Yêu cầu cơ bản:
- Trên đây là các yêu cầu bắt buộc. Sinh viên tạo CSDL với các ràng buộc toàn vẹn
dựa vào thực tế.
Sinh viên tự đưa ra thêm các câu hỏi thuộc các dạng (thuộc tập DDL, DML), Store
procedure, Trigger và thực hiện các câu hỏi đó
BÀI LÀM
/*Câu 1:
1. Tạo Database và tạo bảng*/
Tạo Database được lưu trong ổ F:
create database QLMUONSACH
on( name='QLMUONSACH_dat',
filename='F:\CaithienCSDL\QLMUONSACH_dat.mdf'
)
log on (name='QLMUONSACH_log',
filename='F:\CaithienCSDL\QLMUONSACH_log.ldf'
)
Tạo các bảng cần thiết.
Tạo bảng Nhà xuất bản
if exists (select * from sysobjects where name='Nhaxban')
drop table Nhaxban
create table Nhaxban
(Manxban char(4) primary key,Ten_xb nvarchar(30),diachi_nxb nvarchar(30))
Tạo bảng loại sach
If exists(select * from sysobjects where name=’loaisach’)
Drop table loaisach
go
create table Loaisach
(Masach char(4) primary key, Tensach nvarchar(20),Tentacgia
nvarchar(20),Namxb datetime CONSTRAINT c_nxb CHECK(Namxb
BETWEEN '01/01/1990' AND '01/01/2010'),Soluongco int constraint c_sl
check(Soluongco between 0 and 999),Sotrang int constraint c_st check(Sotrang
between 0 and 99999),Manxban char(4),
constraint fk_xb foreign key(Manxban) references Nhaxban(Manxban)
)
Tạo bảng Độc giả mượn
create table Docgiamuon
(
Madocgia char(4) ,
Hoten nvarchar(30), quequan nvarchar(30),Masach char(4), constraint fk_dg
foreign key(Masach) references Loaisach(Masach),
Sluong int constraint c_soluong check(Sluong between 0 and 9),ngaymuon
datetime CONSTRAINT c_ngaymuon CHECK(Ngaymuon BETWEEN
'01/01/1990' AND '01/01/2010'),ngayhen datetime CONSTRAINT c_ngayhen
CHECK(ngayhen BETWEEN '01/01/1990' AND '01/01/2010'),constraint
pk_docgiamuon primary key(Madocgia,Masach,Ngaymuon)
)
Tạo bảng độc giả trả
create table Docgiatra
(
Madocgia char(4),Masach char(4),constraint fk_dgt foreign key(Masach)
references Loaisach(Masach),Ngaytra datetime constraint c_trasach
check(Ngaytra BETWEEN '01/01/1990' AND '01/01/2010'),constraint
pk_docgiatra primary key(Madocgia,masach,Ngaytra)
)
2. Nhập dữ liệu vào bảng
Nhập dữ liệu bảng Nhà xuất bản.
Insert into Nhaxban values('nxb1','Nha xuat ban giao duc','ha noi')
Insert into Nhaxban values('nxb2','Nha xuat ban Da Nang','Da nang')
Insert into Nhaxban values('nxb3','Nha xuat ban Thanh Pho HCM','Thanh Pho
HCM')
Insert into Nhaxban values('nxb4','Nha xuat ban Can tho','Can tho')
Câu 2:
1.Tạo một truy vấn TV1 để hiển thị danh sách độc giả mượn sách trong tháng 10 năm 98
bao gồm những thông tin: Hoten, ngaymuon, tensach, tentacgia.
Select Hoten,Ngaymuon,tensach,tentacgia
from loaisach as t1,docgiamuon as t2
where t1.masach=t2.masach and month(ngaymuon)=10 and year(ngaymuon)=1998
2. Tạo một truy vấn TV2 để hiển thị số lượng còn của mỗi loại sách của nhà xuất
bản Kim đồng bao gồm những thông tin: tensach, nxban, soluongcon.
Select tensach,ten_xb,sum(soluongco-sluong) as soluongcon into TV2
from Nhaxban as t1,docgiamuon as t2,loaisach as t3
where t1.manxban=t3.manxban and t2.masach=t3.masach and ten_xb = 'kim dong'
group by tensach,ten_xb
3. Tạo một truy vấn TV3 để hiển thị danh sách những độc giả mượn sách quá
hạn bao gồm những thông tin: Hoten, Ngaymuon, Ngayhen, songayqua (Số ngày quá
hạn).
Select hoten,Ngaymuon,Ngayhen,sluong,(year(ngayhen)-year(ngaymuon))*365+
(month(ngayhen)-month(ngaymuon))*30+(day(ngayhen)-day(ngaymuon)) as
Songayquahan into TV3
from Docgiamuon
4. Tạo một truy vấn TV4 để hiển thị danh sách những độc
giả mượn sách quá hạn bao gồm những thông tin Hoten, sluong, mucquahan
Trong đó: Mucquahan là Mức 1 nếu songayqua<5
Mucquahan là Mức 2 nếu songayqua<10
Mucquahan là Mức 3 nếu songayqua>=10.
Select hoten,Sluong,Songayquahan,'Mucquahan'=
case
when Songayquahan<5 then 'Muc 1'
when Songayquahan<10 then 'Muc 2'
else 'Muc 3'
end
into TV4
from dbo.TV3
5. Tạo một truy vấn TV5 để hiển thị danh sách những độc giả trả sách
đúng hạn hoặc sớm hạn bao gồm những thông tin: Hoten, masach, tensach.
Select hoten,t1.masach,tensach
from loaisach as t1, docgiamuon as t2,docgiatra as t3
where t1.masach=t2.masach and t1.masach=t3.masach and
t2.madocgia=t3.madocgia and ngayhen>=(select ngaytra from docgiatra)
6. Tạo một truy vấn TV6 để hiển thị những loại sách có số trang >100 và số
lượng còn là 20 của nhà xuất bản giáo dục hoặc tên sách có chữ Tin học bao gồm
Tensach, sotrang, ten_xb, tentacgia.
select Tensach,sotrang,ten_xb,tentacgia
from Nhaxban as t1,loaisach as t2
where t1.manxban=t2.manxban and sotrang>100 and(soluongco=20 or tensach
like'%tin hoc%' )
7. Hiển thị thông tin của độc giả mượn nhiều sách nhất.
select
t1.hoten,t1.quequan,t1.sluong,t1.ngayhen,t1.madocgia,t1.ngaymuon,count(t1.masac
h) as slsach
from docgiamuon as t1
group by t1.hoten,t1.quequan,t1.sluong,t1.ngayhen,t1.madocgia,t1.ngaymuon
having count (t1.masach)>=all(select count(masach) from loaisach)
Câu 3: Tạo ra các view (tối thiểu 3 view). So sánh bảng và view.
Thực hiện tất cả các thao tác có thể có trên view.
VIEW : hien thi thong tin doc gia muon sach thang 6 nam 2001
create view Docgiamuon_theongay
as
select *
from docgiamuon
where month(ngaymuon)=6 and year(ngaymuon)=2001
select * from Docgiamuon_theongay
View:hien thi thong tin loai sach co doc gia muon nhieu nhat
create view tt_sach
as
select t1.madocgia,tensach,hoten,count(t2.masach) as sl
from docgiamuon as t1,loaisach as t2
where t1.masach=t2.masach
group by tensach,hoten,t1.madocgia
having count(t2.masach)>=all(select count(masach) from loaisach)
hien thi thong tin cua doc gia co ten la Lan muon sach cua nha xuat ban Giao duc hoac
muon ngay '23/5/2002'
create view docgia_xb
as
select hoten,quequan,sluong,ten_xb,ngaymuon
from docgiamuon as t1,nhaxban as t2,loaisach as t3
where t1.masach=t3.masach and t2.manxban=t3.manxban and hoten='%lan' and
ngaymuon='23/5/2002'
So sánh bảng và View
* Định nghĩa:
- Các bảng là các đối tượng của CSDL,nó chứa tất cả các dữ liệu có mặt trong một
CSDL. Một CSDL được cấu thành từ nhiều bảng, mỗi bảng chứa tập hợp các dữ liệucó
liên quan với nhau.
- View là một cách thức để xem các dữ liệu từ một hay nhiều bảng trong CSDL. View là
một bảng ảo, bảng ảo được tạo ra như một tập con của các cột hay các hàng từ một hay
nhiều bảng khác nhau. Đồng thời nó cũng bao gồm tất cả các hàng và các cột.Tuy nhiên,
một view không tồn tại như một tập hợp của các giá trị dữ liệu lưu trữ trong cơ sở dữ liệu
.Các dòng và các cột đến từ các bảng tham chiếu trong chuỗi truy vấn. Dữ liệu được hiển
thị trực tiếp từ bảng ngay tại thời gian thục thi.
Giống nhau: Khi dữ liệu hiển thị thì đều hiển thị dạng bảng.Bảng và View đều có thể
được xây dựng dựa vào các bảng,view khác.
Khác nhau:
+Bảng: Thao tác trực tiếp với cơ sở dữ liệu
+ View: Khi thao tác thì không có ảnh hưởng gì đến cơ sở dữ liệu.
- View chỉ có thể được tạo trong CSDL hiện tại.
- Những giá trị mặc định, những qui tắc và bẫy lỗi không thể được liên kết với
view. Còn bảng thì hoàn toàn có các khả năng đó.
- Các bảng tạm thời không thể tham gia vào view.
- Khai báo view được lưu giữ ngay cả khi các bảng liên quan bị loại bỏ.
- Các câu truy vấn khai báo view không thể bao gồm các mệnh đề ORDER BY,
COMPUTE, COMPUTE BY hoặc từ khoá INTO.
- Khi xoá view thì không ảnh hưởng gì đến CSDL.
Câu 4: Thiết lập chỉ mục và chỉ mục toàn văn trên bảng Dogiamuon. Ứng dụng để tìm
kiếm theo chỉ mục mà mình vừa tạo ra
alter table Docgiamuon
drop index sinhvien.id_madocgia
create index id_docgiamuon on Docgiamuon(madocgia)
timkiem theo chi muc
select * from Docgiamuon where madocgia='dg1'
Tạo thêm một chỉ mục khac trong bảng Đocgiamuon
Create NONCLUSTERED index id_thu
ON docgiamuon(masach)
Xem bản ghi trong bảng Docgiamuon
SELECT * FROM DOCHIAMUON
Sử dụng chỉ mục toàn văn
Các câu truy vấn toàn văn có thể được đưa ra trên các bảng mà ở đó các chỉ mục toàn văn
đã được định nghĩa . Các câu truy vấn toàn văn sử dụng các từ khoá CONTAINS và
PREETEXT. Ta thực hiện các câu truy vấn toàn văn trên bảng docgiamuon
Select madocgia,hoten,masach,sluong
From docgiamuon
Where CONTAINS(quequan,’”hung yen” or “hai duong”’)
Câu 5:
Đề xuất các chức năng của hệ thống, viết các Store procedure đáp ứng các chức năng đó.
1. thu tuc nhap nha xuat ban
if exists(select * from sysobjects where name='p_nhapnxb')
drop proc p_nhapnxb
go
create proc p_nhapnxb
@manxban char(4),
@ten_xb nvarchar(30),@diachi_nxb nvarchar(30)
as
insert into Nhaxban values(@manxban,@ten_xb,@diachi_nxb)
print 'ma nha xuat ban:'+@manxban+'da duoc nhap thanh cong'
go
Thực thi thủ tục trên
Exec p_nhapnxb ‘nxb6’,’linh tinh’,’bat ki’
2. Nhap du lieu bang loai sach
if exists(select * from sysobjects where name='p_nhaploaisach')
drop proc p_nhaploaisach
go
create proc p_nhaploaisach
@masach char(4),@tensach nvarchar(30),@tentacgia nvarchar(30),@Namxb
datetime,@soluongco int,@Sotrang int,@manxban char(4)
as
if exists(select manxban from Nhaxban where manxban=@manxban)
begin
insert into loaisach
values(@masach,@tensach,@tentacgia,@Namxb,@soluongco,@Sotrang,@manxban)
print 'Da nhap thanh cong'
end
3. Nhap du lieu bang docgiamuon
if exists(select * from sysobjects where name='p_nhapdocgiamuon')
drop proc p_nhapdocgiamuon
go
create proc p_nhapdocgiamuon
@madocgia char(4),@hoten nvarchar(30),@quequan nvarchar(30),@masach
char(4),@sluong int,@ngaymuon datetime,@ngayhen datetime
as
if exists(select masach from loaisach where masach=@masach)
begin
if (@ngaymuon<@ngayhen)
begin
insert into docgiamuon
values(@madocgia,@hoten,@quequan,@masach,@sluong,@ngaymuon,@ngayhen)
print 'nhap thanh cong'
end
else
print 'ban ghi khong hop le'
end
go
Tao thu tuc nhap du lieu bang tra sach
if exists(select * from sysobjects where name='p_nhaptrasach')
drop proc p_nhaptrasach
go
create proc p_nhaptrasach
(@madocgia char(4),@masach char(4),@ngaytra datetime)
as
if exists(select masach from loaisach where masach=@masach)
begin
if exists(select madocgia from docgia where madocgia=@madocgia)
begin
declare @ngaymuon datetime
set @ngaymuon=(select ngaymuon from Docgiamuon)
if (@ngaymuon<@ngaytra)
begin
insert into docgiatra
values(@madocgia,@masach,@ngaytra)
end
else print 'ngay tra sach nhap khong dung'
end
end
else
print 'Ma sach khong dung'
Câu 6: Đưa ra các yếu tố của RBTV, thiết lập các trigger thực hiện các ràng buộc toàn
vẹn đó.
1. Thuc hien viec xoa nha xuat ban thi xoa cac thong tin lien quan
if exists(select * from sysobjects where name='tg_del_nxb')
drop trigger tg_del_nxb
go
create trigger tg_del_nxb
on Nhaxban
for delete
as
if(@@Rowcount=0)
begin
print'khong co ban ghi de xoa'
return
end
delete loaisach from loaisach as t1,deleted as t2
where t1.manxban=t2.manxban
tạo thủ tục để kiểm tra trigger trên
create proc xoaxb(@manxban varchar(10))
as
alter table loaisach nocheck constraint all
delete from nhaxban where manxban=@manxban
alter table loaisach check constraint all
thực thi khi xóa sinh viên có masv 'sv21'
exec xoaxb 'xb2'
Trigger:Khi chen loai sach thi manxban phai ton tai trong bang nhaxban
if exists(select * from sysobjects where name='tg_i_loaisach')
drop trigger tg_i_loaisach
go
create trigger tg_i_loaisach
on loaisach
for insert
as
if not exists(select t1.manxban from nhaxban as t1,inserted as t2 where
t1.manxban=t2.manxban)
begin
print'ma nha xuat ban khong dung ban hay nhap lai'
rollback tran
end
Trigger:xoa loai sach thi phai xoa cac thong tin lien quan
if exists(select * from sysobjects where name='tg_del_loaisach')
drop trigger tg_del_loaisach
go
create trigger tg_del_loaisach
on loaisach
for delete
as
if(@@rowcount=0)
begin
print'khong co ban ghi de xoa'
return
end
delete docgiamuon from docgiamuon,deleted
where docgiamuon.masach=deleted.masach
delete docgiatra from docgiatra,deleted
where docgiatra.masach=deleted.masach
trigger:nhap ngay tra phai lon hon hoac bang ngay muon sach
if exists(select * from sysobjects where name='tg_iu_trasach')
drop trigger tg_iu_trasach
go
create trigger tg_iu_trasach
on docgiatra
for insert,update
as
if exists(select t1.masach from loaisach as t1,inseted as t2 where t1.masach=t2.masach)
begin
if exists(select t1.madocgia from docgiamuon as t1,inserted as t2 where
t1.madocgia=t2.madocgia)
begin
declare @ngaymuon datetime
declare @ngaytra datetime
select @ngaymuon=ngaymuon from docgiamuon
select @ngaytra=ngaytra from docgiatra where ngaytra in(select ngaytra from
inserted)
if(@ngaymuon>@ngaytra)
begin
print'ngay tra khong dung'
rollback tran
end
if update(ngaytra)
begin
update t1 set t1.ngaytra=t2.ngaytra
,t1.madocgia=t2.madocgia,t1.masach=t2.masach
from docgiatra as t1,inserted as t2,deleted as t3
where t1.madocgia=t3.madocgia and t1.masach=t3.masach
end
end
else
begin
print'Ma doc gia khong dung'
rollback tran
end
end
Tao trigger: khi xoa thong tin bang doc gia muon thi phai xoa cac thong tin lien quan
if exists(select * from sysobjects where name='tg_d_docgiamuon')
drop trigger tg_d_docgiamuon
go
create trigger tg_d_docgiamuon
on docgiamuon
for delete
as
if(@@rowcount=0)
begin
print'khong co ban ghi de xoa'
return
end
delete t1 from docgiatra as t1,deleted as t2
where t1.madocgia=t2.madocgia
Câu 7: Tạo ra các user (tối thiểu là 5 user), tạo ra các Role (tối thiểu là 3 role). Thực hiện
gán các user vào các role. Sau đó , thực hiện phân quyền cho các user và các role (sử
dụng tất cả các quyền).
/*Moi quan he user va role: User nam trong ROLE cho ne can phai xoa USER truoc khi
xoa ROLE
nhung can kiem tra xem USER co duoc anh xa den DATABASE nao khac ngoai
DATABASE mac dinh ung
voi USER luc duoc tao hay khong, neu co thi ta cung can phai huy viec anh xa nay di sau
do neu can moi xoa
duoc cac LOGIN*/
If exists(select name from sysobjects where name='Xemthanhviencuarole')
drop proc Xemthanhviencuarole
go
create proc Xemthanhviencuarole @role_name sysname
As
if exists(select name from sysusers where name=@role_name)
begin
select t1.name[Tennhom],t2.name[Cacthanhvientrongnhom],t2.uid[Ma
so],t2.password[Mat khau],t2.gid[Ma so nhom]
from sysusers t1,sysusers t2,sysmembers t3
where t1.uid=t3.groupuid and t1.issqlrole=1 and t1.name=@role_name and
t2.uid=t3.memberuid
order by 1
end
Goi thu tuc de xem co bao nhieu thanh vien trong ROLE
Exec Xemthanhviencuarole 'role1'
Xoa cac role cu (trong database hien hanh)
If exists(select name from sysobjects where name='Xoa_Role1')
drop proc Xoa_Role1
go
Thu tuc xoa role va cac user ben trong no
Cach 1: Dung bien dem va lay tung dong du lieu mot
create proc Xoa_Role1 @role_name sysname
as
if exists(select name from sysusers where name=@role_name)
begin
Neu role1 con thanh vien tuc la chua the xoa truc tiep nen can xoa cac
user con dang nam trong role
Declare @sothanhvien int
select @sothanhvien=COUNT(*) from sysusers t1, sysusers t2,sysmembers t3
where t1.uid=t3.groupuid and t1.issqlrole=1 and t1.name=@role_name and
t2.uid=t3.memberuid
if(@sothanhvien>0) co USER trong ROLE
begin
Declare @i int
set @i=0
while(@i<@sothanhvien)
begin
Declare @value sysname
Set @value =(select top 1 t2.name
from sysusers t1,sysusers
t2,sysmembers t3
where t1.uid=t3.groupuid
and t1.issqlrole=1 and t1.name=@role_name and t2.uid=t3.memberuid)
Exec sp_dropprolemember @role_name,@value
Set @i=@i+1
end
end
print 'Toi se xoa'+@role_name
Sau khi Role da rong ta co the xoa role
Exec sp_dropprole @role_name
end
go
CACH 2: DUNG CURSER
Create proc Xoa_Role @role_name sysname
as
if exists(select name from sysusers where name=@role_name)
begin
Declare @sothanhvien int
select @sothanhvien=COUNT(*)
from sysusers t1,sysusers t2,sysmembers t3
where t1.uid=t3.groupuid and t1.issqlrole=1 and t1.name=@role_name and
t2.uid=t3.memberuid
if (@sothanhvien>0)
begin
declare x cursor for
select t2.name
from sysusers t1,sysusers t2,sysmembers t3
where t1.uid=t3.groupuid and t1.issqlrole=t3.memberuid
declare @value sysname
Open x
Fetch next from x into @value
while (@@fetch_status=0)
begin
Exec sp_dropuser @value
fetch next from x into @value
end
Close x
Deallocate x
end
print 'Toi se xoa' +@role_name
Sau khi role da rong ta co the xoa role
Exec sp_droprole @role_name
end
go
Create proc ThemThanhvienvaoRole @ten_role sysname,@ten_user sysname,@bi_danh
sysname=NULL
as
if(@bi_danh=@ten_user)
set @bi_danh=@ten_user
kiem tra xem trong role da co user nao voi bi danh tuong ung hay chua
if not exists(select name from sysusers where name=@bi_danh)
begin
Exec sp_adduser @ten_user,@bi_danh,@ten_role
end
else
neu ton tai @ten_user thi ta chi can them vao role can thiet
Exec sp_addrolemember @ten_role,@bi_danh
go
LOGINS
/*Tao login voi ten user1 co password la null va database duoc su dung la
QLMUONSACH */
if not exists(select name from master.syslogins where name='User1')
Exec sp_addlogin'User1',null,'QLMUONSACH'
go
if not exists(select name from master.syslogins where name='User2')
Exec sp_addlogin'User2',null,'QLMUONSACH'
Go
if not exists(select name from master.syslogins where name='User3')
Exec sp_addlogin'User3',null,'QLMUONSACH'
go
if not exists(select name from master.syslogins where name='User4')
Exec sp_addlogin'User4',null,'QLMUONSACH'
go
if not exists(select name from master.syslogins where name='User5')
Exec sp_addlogin'User5',null,'QLMUONSACH'
go
if not exists(select name from master.syslogins where name='User6')
Exec sp_addlogin'User6',null,'QLMUONSACH'
Go
Tao USER
Exec ThemThanhvienvaoRole 'Role1','User1','Doc_Gia_1'
go
Exec ThemThanhvienvaoRole 'Role1','User2','Doc_Gia_2'
go
Exec ThemThanhvienvaoRole 'Role2','User3','Doc_Gia_3'
go
Exec ThemThanhvienvaoRole 'Role2','User4','Doc_Gia_4'
go
Exec ThemThanhvienvaoRole 'Role2','User1','Doc_Gia_1'
go
Exec ThemThanhvienvaoRole 'Role3','User5','Doc_Gia_5'
go
Exec ThemThanhvienvaoRole 'Role3','User6','Doc_Gia_6'
Tao Thu Tuc Cap Quyen
if exists(select name from sysobjects where name='CapQuyen_Select_ChoRole1')
drop proc CapQuyen_Select_ChoRole1
go
create proc CapQuyen_Select_ChoRole1
as
Role 1 duoc cap quyen Select tren bang Nhaxban
Grant Select on Nhaxban to Role1
Role 1 duoc cap quyen tren bang loaisach
Grant Select on Loaisach to Role1
Role1 duoc cap quyen Select tren bang DOcgiamuon
Grant Select on Docgiamuon to Role1
Role 1 duoc cap quyen Select tren bang Docgiatra
Grant Select on Docgiatra to Role1
go
Exec CapQuyen_Select_choRole1