Professional Documents
Culture Documents
Quản trị cơ sở dữ liệuSQL server
Quản trị cơ sở dữ liệuSQL server
Mc lc .................................................................................................................................1
1
1.1.2
1.2.2
To bng mi .................................................................................................17
1.2.3
1.2.4
2.2
2.3
2.3.1
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
Hm (Function)..............................................................................................27
2.3.8
2.3.9
Cu lnh SELECT.................................................................................................29
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
Php ni .........................................................................................................41
3.1.6
3.1.7
3.1.8
3.1.9
3.2
3.2.1
Thm d liu..................................................................................................52
3.2.2
Cp nht d liu.............................................................................................53
3.2.3
Xa d liu.....................................................................................................54
To bng................................................................................................................56
4.2
4.2.1
4.2.2
4.2.3
4.3
Sa i nh ngha bng........................................................................................61
4.4
Xa bng ...............................................................................................................63
4.5
4.6
4.7
5.1.1
To th tc lu tr .........................................................................................68
5.1.2
Li gi th tc................................................................................................69
5.1.3
5.1.4
5.1.5
Gi tr tr v trong th tc lu tr.................................................................70
Tham s vi gi tr mc nh .........................................................................71
5.1.6
Sa i th tc ...............................................................................................72
5.1.7
Xa th tc.....................................................................................................72
5.2
5.2.1
5.2.2
5.2.3
5.2.4
5.2.5
Xa hm.........................................................................................................77
5.3
Trigger...................................................................................................................77
2
5.3.1
Cc c im ca trigger ...............................................................................77
5.3.2
5.3.3
5.3.4
nh ngha trigger..........................................................................................78
5.3.5
5.3.6
5.4
5.5
6.2
6.2.1
6.2.2
6.3
Cc thao tc thc hin qu trnh Backup v Restore trong SQL Server 2005
Express Edition........................................................................................................................89
6.3.1
6.3.2
Hm ROUND ................................................................................................94
7.2.1
Hm LEFT .....................................................................................................95
7.2.2
Hm RIGHT ..................................................................................................95
7.2.3
7.2.4
Hm SUBSTRING ........................................................................................95
Hm LEN.......................................................................................................96
7.2.5
Hm REPLACE.............................................................................................96
7.2.6
Hm STUFF...................................................................................................96
7.2.7
Hm LOWER/UPPER...................................................................................97
7.2.8
Hm LTRIM/RTRIM ....................................................................................97
7.3
7.3.1
7.3.2
Hm GETDATE ............................................................................................97
Hm DAY/ MONTH/ YEAR ........................................................................97
7.3.3
Hm DATEPART..........................................................................................98
7.3.4
Hm DATENAME ........................................................................................99
3
7.4
8
8.1.1
8.1.2
8.1.3
8.2
8.2.1
C# v VB.NET.............................................................................................104
8.2.2
VB 6.............................................................................................................106
Framework
Operating
System
Memory
Hard Disk
Windows Small Business Server 2003 with Service Pack 1 hoc cao hn
Vista Home Basic v cc phin bn cao hn (SQL Express SP1 and SQL Express
Advanced SP2)
425 MB cng cho cc ci t SQL Server Books Online, SQL Server Mobile Books
Online, v sample databases
Drive
Display
Other Devices
Mouse, Keyboard
Other
Requirements
Chi tit yu cu h thng cho cc phin bn Microsoft SQL Server 2005 c th tham kho
ti a ch:
http://www.microsoft.com/sql/prodinfo/sysreqs/default.mspx
Download v ci t Microsoft .NET Framework 2.0: ci t thnh cng SQL Server
Express Edition hay cc phin bn SQL Server 2005 khc, Microsoft .NET Framework 2.0
phi c ci t trc.
G b cc phin bn Beta, CTP hoc Tech Preview ca SQL Server 2005, Visual Studio
2005 v Microsoft .NET Framework 2.0.
Download v ci t
6
Ci t SQL Server 2005 Express Edition: Microsoft SQL Server 2005 Express Edition l
phin bn min ph, d s dng v nh ca Microsoft SQL Server 2005. Microsoft SQL
Server 2005 Express Edition c tch hp trong Visual Studio 2005 to ra s d dng trong
vic pht trin cc ng dng hng CSDL. SQL Server 2005 Express Edition c t do s
dng trong cc ng dng thng mi v d dng cp nht ln cc phin bn cao hn khi cn
thit.
Ci t SQL Server Management Studio Express: SQL Server Management Studio
Express cung cp giao din ngi dng d dng tng tc vi cc thnh phn ca Microsoft
SQL Server 2005 Express Edition. Trc khi ci t SQL Server Management Studio Express,
MSXML 6.0 phi c ci t
Download ti a ch:
http://www.microsoft.com/express/sql/download/default.aspx
Click Next:
10
11
12
Lu : SQL Server 2005 c hai kiu authentication (kim tra ngi dng).
Windows authentication mode: Vic kim tra ngi dng ca SQL Server 2005 s ph
thuc vo vic kim tra ngi dng ca Windows. Khi ngi dng c quyn ng nhp vo
Windows, ngi dng s c quyn ng nhp vo SQL Server. Kiu kim tra ngi dng
ny thng c s dng khi ng dng khai thc d liu v SQL Server c ci trn cng
mt my tnh.
SQL Server authentication mode: Vic kim tra ngi dng ca SQL Server 2005 s
khng ph thuc vo vic kim tra ngi dng ca Windows. Khi ngi dng c quyn ng
nhp vo Windows, ngi dng cha chc s c quyn ng nhp vo SQL Server. ng
nhp vo SQL Server, ngi dng ny phi c mt b username v password do SQL Server
qun l. Kiu kim tra ngi dng ny thng c s dng khi ng dng khai thc d liu v
SQL Server khng c ci trn cng mt my tnh.
Khi chn Mixed mode, SQL Server c th dng bt k kiu kim tra ngi dng no khi
cn thit. y l mt thit lp thc s rt hu ch khi xy dng cc ng dng CSDL. Ngoi ra,
ta cng phi nh password vo hai bn di c th ng nhp vo SQL Server khi ta xy
dng mt ng dng truy xut vo CSDL my ny khi ta ang my khc.
Click Next ba ln:
13
14
15
1.2.1 To mt CSDL mi
16
1.2.2 To bng mi
17
18
21
V d: Lnh grant s cp quyn Select trn bng Nhanvien trong CSDL Test cho cc
Users thuc Role public
grant select
on nhanvien
to public
Sau khi thc hin lnh ny, c Users trong Role public c th thc hin cu lnh Select
trn bng Nhanvien trong CSDL Test.
Dng lnh deny t chi quyn select trn bng Nhanvien trong CSDL Test ca cc
Users thuc Role public
deny select
on nhanvien
to public
Sau khi thc hin lnh ny, c Users trong Role public s khng th thc hin cu lnh
Select trn bng Nhanvien trong CSDL Test.
Dng lnh revoke xa b cc quyn c cp hay t chi trc .
revoke select
on nhanvien
to public
Sau khi thc hin lnh ny, cc quyn c gn hay t chi ca Users trong Role public
trn bng Nhanvien trong CSDL Test s c xa hon ton.
ln c cng tn trong cc bng khc nhau th bt buc phi ch nh thm tn bng trc tn
ct; tn bng v tn ct c phn cch nhau bi du chm
V d: Gi s chng ta c CSDL nh sau:
Kiu chui vi di c nh
Nchar(n)
Varchar(n)
Nvarchar(n)
Int
Tinyint
S nguyn c gi tr t 0 n 255.
Smallint
Bigint
Numeric
Decimal
Float
Real
Money
Kiu tin t
Bit
Datetime
Smalldatetime
Binary
Varbinary
Image
Text
Ntext
V d: Mi ct trong bng s cha nhng d liu thuc v duy nht mt kiu d liu trong
SQL Server. Ct no cha nhng d liu thuc kiu no s c quy nh lc nh ngha bng.
Create table Nhanvien
(
MANV NVARCHAR(10)
NOT NULL,
HOTENNVARCHAR(30)
NOT NULL,
GIOITINH
BIT,
NGAYSINH
SMALLDATETIME,
NOISINH
NCHAR(50),
HSLUONG
DECIMAL(4,2),
MADV INT
)
26
2.3.7 Hm (Function)
C 2 loi hm: mt loi l c xy dng sn trong SQL Server 20005 Express Edition
(built-in) v mt loi do ngi dng t nh ngha (user-defined)
Cc hm Built-In c chia lm 3 nhm:
Rowset Functions : Loi ny thng tr v mt object v c i x nh mt table. V
d nh hm OPENQUERY s tr v mt recordset v c th ng v tr ca mt table trong cu
lnh Select.
Aggregate Functions : Loi ny lm vic trn mt s gi tr v tr v mt gi tr n hay
l cc gi tr tng. V d nh hm AVG s tr v gi tr trung bnh ca mt ct.
Scalar Functions : Loi ny lm vic trn mt gi tr n v tr v mt gi tr n. Trong
loi ny li chia lm nhiu loi nh nh cc hm v ton hc, v thi gian, x l kiu d liu
String....V d nh hm MONTH('2002-09-30') s tr v thng 9.
Cc hm User-Defined (c to ra bi cu lnh CREATE FUNCTION v phn body
thng c gi trong cp lnh BEGIN...END) cng c chia lm cc nhm nh sau:
Scalar Functions : Loi ny cng tr v mt gi tr n bng cu lnh RETURNS.
Table Functions : Loi ny tr v mt table
Operators
=, >, <, >=, <=, <>, !=, !>, !< (Comparison operators)
NOT
AND
= (Assignment)
2.3.11 Gi tr NULL
Mt c s d liu l s phn nh ca mt h thng trong th gii thc, do cc gi tr
d liu tn ti trong c s d liu c th khng xc nh c. Mt gi tr khng xc nh c
xut hin trong c s d liu c th do mt s nguyn nhn sau:
Gi tr c tn ti nhng khng bit.
Khng xc nh c gi tr c tn ti hay khng.
Ti mt thi im no gi tr cha c nhng ri c th s c.
Gi tr b li do tnh ton (trn s, chia cho khng,...)
Nhng gi tr khng xc nh c biu din trong c s d liu quan h bi cc gi tr
NULL. y l gi tr c bit v khng nn nhm ln vi chui rng (i vi d liu kiu
chui) hay gi tr khng (i vi gi tr kiu s). Gi tr NULL ng mt vai tr quan trng
trong cc c s d liu v hu ht cc h qun tr c s d liu quan h hin nay u h tr vic
s dng gi tr ny.
28
tiu__ct
31
V d:
select
33
Trong mnh FROM c th s dng b danh (alias) nhm lm cho cu truy vn d nhn
hn.
V d:
Select * from Customers c
Where c.CustomerID = 1
Tp hp
Kim tra khun dng d liu.
Cc gi tr NULL
Cc ton t so snh
Ton t
ngha
Bng
>
Ln hn
<
Nh hn
>=
Ln hn hoc bng
<=
Nh hn hoc bng
<>
Khc
!>
Khng ln hn
!<
Khng nh hn
CUSTOMERNAME,
ngha
CUSTOMERNAME,
ngha
Mt k t bt k
[]
[^]
select *
from customers
where customername like 'Nguyen%'
Gi tr NULL
D liu trong mt ct cho php NULL s nhn gi tr NULL trong cc trng hp sau:
Nu khng c d liu c nhp cho ct v khng c mc nh cho ct hay kiu d liu
trn ct .
Ngi s dng trc tip a gi tr NULL vo cho ct .
Mt ct c kiu d liu l kiu s s cha gi tr NULL nu gi tr c ch nh gy trn
s.
Trong mnh WHERE, kim tra gi tr ca mt ct c gi tr NULL hay khng, ta s
dng cch vit:
WHERE tn_ct IS NULL
hoc:
WHERE tn_ct IS NOT NULL
V d:
select *
from Customers
where birthday is null
Sp xp kt qu truy vn
Mc nh, cc dng d liu trong kt qu ca cu truy vn tun theo th t ca chng
trong bng d liu hoc c sp xp theo ch mc (nu trn bng c ch mc). Trong trng
hp mun d liu c sp xp theo chiu tng hoc gim ca gi tr ca mt hoc nhiu
trng, ta s dng thm mnh ORDER BY trong cu lnh SELECT; Sau ORDER
BY l danh sch cc ct cn sp xp (ti a l 16 ct). D liu c sp xp c th theo chiu
tng (ASC) hoc gim (DESC), mc nh l sp xp theo chiu tng. Nu sau ORDER BY c
nhiu ct th vic sp xp d liu s c u tin theo th t t tri qua phi.
V d: V d i y sp xp thng tin cc khch hng theo th t tui gim dn.
select CUSTOMERNAME, year(getdate())- year(BIRTHDAY) as AGE, ADDRESS
from Customers
order by AGE DESC
ct_sp_xp]
[COMPUTE
Trong
Cu_lnh_1 c dng
SELECT danh_sch_ct
[INTO tn_bng_mi]
[FROM danh_sch_bng|khung_nhn]
[WHERE iu_kin]
[GROUP BY danh_sch_ct]
[HAVING iu_kin]
v Cu_lnh_i (i = 2,..,n) c dng
SELECT danh_sch_ct
[FROM danh_sch_bng|khung_nhn]
[WHERE iu_kin]
[GROUP BY danh_sch_ct]
[HAVING iu_kin]
V d: Php hp gia hai bng di y cho kt qu nh sau:
UNION
select A,B from A
union
select F,G from B
Mc nh, nu trong cc truy vn thnh phn ca php hp xut hin nhng dng
d liu ging nhau th trong kt qu truy vn ch gi li mt dng. Nu mun gi li cc dng
ny, ta phi s dng thm t kho ALL trong truy vn thnh phn.
39
UNION
ALL
Khi s dng ton t UNION thc hin php hp, ta cn ch cc nguyn tc sau:
Danh sch ct trong cc truy vn thnh phn phi c cng s lng.
Cc ct tng ng trong tt c cc bng, hoc tp con bt k cc ct c s dng trong
bn thn mi truy vn thnh phn phi cng kiu d liu.
Cc ct tng ng trong bn thn tng truy vn thnh phn ca mt cu lnh UNION
phi xut hin theo th t nh nhau. Nguyn nhn l do php hp so snh cc ct tng ct mt
theo th t c cho trong mi truy vn.
Khi cc kiu d liu khc nhau c kt hp vi nhau trong cu lnh UNION,
chng s c chuyn sang kiu d liu cao hn (nu c th c).
Tiu ct trong kt qu ca php hp s l tiu ct c ch nh trong truy vn u
tin.
Mnh ORDER BY v COMPUTE dng sp xp kt qu truy vn hoc tnh ton
cc gi tr thng k ch c s dng cui cu lnh UNION. Chng khng c s
dng trong bt k truy vn thnh phn no.
Mnh GROUP BY v HAVING ch c th c s dng trong bn thn tng truy vn
thnh phn. Chng khng c php s dng tc ng ln kt qu chung ca php hp.
Php ton UNION c th c s dng bn trong cu lnh INSERT.
Php ton UNION khng c s dng trong cu lnh CREATE VIEW.
40
3.1.5 Php ni
Khi cn thc hin mt yu cu truy vn d liu t hai hay nhiu bng, ta phi s dng n
php ni. Mt cu lnh ni kt hp cc dng d liu trong cc bng khc nhau li theo mt
hoc nhiu iu kin no v hin th chng trong kt qu truy vn.
V d: tm ra khch hng c m l 3 t hng trong nhng ngy no th cu truy vn
nh sau:
select c.CUSTOMERNAME, o.ORDERDATE
from customers c, orders o
where c.customerid = o.customerid
and c.customerid = 3
Bng Order
ngha
Bng
>
Ln hn
>=
Ln hn hoc bng
<
Nh hn
42
<=
Nh hn hoc bng
<>
Khc
!>
Khng ln hn
!<
Khng nh hn
V d php kt ni t nhin:
select c.CUSTOMERID, c.CUSTOMERNAME,
c.BIRTHDAY, c.GENDER, c.ADDRESS, o.ORDERDATE
from Customers c, Orders o
where c.customerid = o.customerid
hoc vit gn:
select c.*, o.ORDERDATE
from Customers c, Orders o
where c.customerid = o.customerid
Trong php kt ni bng, trng CUSTOMERID xut hin hai ln. S d tha c loi
b bng cch s dng php kt ni t nhin v vic ch nh r cc ct ct cn truy xut.
43
Nu php ni ngoi tri hin th trong kt qu truy vn c nhng dng d liu khng tho
iu kin ni ca bng bn tri trong php ni th php ni ngoi y hin th trong kt qu
truy vn c nhng dng d liu khng tho iu kin ni ca c hai bng tham gia vo php
ni.
V d: Gi s c CSDL nh sau:
Thc hin php ni ngoi tri, ni ngoi phi v ni ngoi y cho kt qu nh sau:
Php ni ngoi tri:
select *
from faculty f left join class c
on f.facultyid = c.facultyid
Php ni ngoi y :
select *
from faculty f full join class c
46
on f.facultyid = c.facultyid
Chc nng
COUNT([ALL|DISTINCT] biu_thc)
COUNT(*)
m s cc dng c chn.
MAX(biu_thc)
Tnh gi tr ln nht
MIN(biu_thc)
Tnh gi tr nh nht
min(year(getdate())-year(BIRTHDAY)) as MINAGE,
max(year(getdate())-year(BIRTHDAY)) as MAXAGE,
avg(year(getdate())-year(BIRTHDAY)) as AVGAGE
from customers
as
money),1)
as
SUMTOTAL
from
Nu mun hin s tin khch hng phi tr cho tng n t hng, ch cn thm trng
ORDERID vo mnh group by.
select c.CUSTOMERID, c.CUSTOMERNAME,
convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)as
money),1)
as
SUMTOTAL
from
money),1)
as
SUMTOTAL
from
iu_kin]
[GROUP BY danh_sch_ct]
[HAVING iu_kin])
Khi s dng truy vn con cn lu mt s quy tc sau:
Mt truy vn con phi c vit trong cp du ngoc. Trong hu ht cc trng
hp, mt truy vn con thng phi c kt qu l mt ct (tc l ch c duy nht mt ct trong
danh sch chn).
Mnh COMPUTE v ORDER BY khng c php s dng trong truy vn con.
Cc tn ct xut hin trong truy vn con c th l cc ct ca cc bng trong truy vn
ngoi.
Mt truy vn con thng c s dng lm iu kin trong mnh WHERE
hoc HAVING ca mt truy vn khc.
Nu truy vn con tr v ng mt gi tr, n c th s dng nh l mt thnh phn bn
trong mt biu thc (chng hn xut hin trong mt php so snh bng)
Php so snh i vi vi kt qu truy vn con
Kt qu ca truy vn con c th c s dng thc hin php so snh s hc vi mt
biu thc ca truy vn cha. Trong trng hp ny, truy vn con c s dng di dng:
WHERE biu_thc php_ton_s_hc [ANY|ALL] (truy_vn_con)
Trong php ton s hc c th s dng bao gm: =, <>, >, <, >=, <=; V truy vn con
phi c kt qu bao gm ng mt ct.
V d: Cu truy vn sau y tm tn khch hng c tui ln nht
select c.CUSTOMERNAME, c.ADDRESS
from customers c
where year(getdate()) - year(BIRTHDAY) =
50
Lnh INSERT
Lnh UPDATE
Lnh DELETE
update tmp1
set address = case
end
3.2.3 Xa d liu
xo d liu trong mt bng, ta s dng cu lnh DELETE. C php ca cu lnh ny
nh sau:
DELETE FROM tn_bng
[FROM danh_sch_bng]
[WHERE iu_kin]
Trong cu lnh ny, tn ca bng cn xo d liu c ch nh sau DELETE FROM.
Mnh WHERE trong cu lnh c s dng ch nh iu kin i vi cc dng d
liu cn xo. Nu cu lnh DELETE khng c mnh WHERE th ton b cc dng d liu
trong bng u b xo.
V d:
delete from Items
where itemid = 3
Xo d liu khi iu kin lin quan n nhiu bng
Nu iu kin trong cu lnh DELETE lin quan n cc bng khng phi l bng cn
xa d liu, ta phi s dng thm mnh FROM v sau l danh sch tn cc bng .
Trong trng hp ny, trong mnh WHERE ta ch nh thm iu kin ni gia cc bng
V d:
delete
from orderdetail
from items
where items.itemid = orderdetail.itemid
and items.itemname = 'LAPTOP'
S dng truy vn con trong cu lnh DELETE
Mt cu lnh SELECT c th c lng vo trong mnh WHERE trong cu lnh
DELETE lm iu kin cho cu lnh tng t nh cu lnh UPDATE.
V d:
delete
from orderdetail
from items
54
55
4.1 To bng
Cu lnh CREATE TABLE c s dng nh ngha mt bng d liu mi trong
CSDL. Khi nh ngha mt bng d liu mi, ta cn phi xc nh c cc yu cu sau y:
Bng mi c to ra s dng vi mc ch g v c vai tr nh th no trong
c s d liu.
Cu trc ca bng bao gm nhng trng (ct) no, mi mt trng c ngha
nh th no trong vic biu din d liu, kiu d liu ca mi trng l g v trng c cho
php nhn gi tr NULL hay khng.
Nhng trng no s tham gia vo kha chnh ca bng. Bng c quan h vi nhng bng
khc hay khng v nu c th quan h nh th no.
Trn cc trng ca bng c tn ti nhng rng buc v khun dng, iu kin hp l ca
d liu hay khng; nu c th s dng u v nh th no.
Cu lnh CREATE TABLE c c php nh sau
CREATE TABLE tn_bng
(
tn_ct
thuc_tnh_ct
cc_rng_buc
[,...
,tn_ct_n thuc_tnh_ct_n cc_rng_buc_ct_n]
[,cc_rng_buc_trn_bng]
)
Tn_bng: tun theo quy tc nh danh, khng vt qu 128 k t
Tn_ct: cc ct trong bng, mi bng c t nht mt ct.
Thuc_tnh_ct: bao gm kiu d liu ca ct, gi tr mc nh ca ct, ct c c thit
lp thuc tnh identity, ct c chp nhn gi tr NULL hay khng. Trong kiu d liu l
thuc tnh bt buc.
56
Cc_rng_buc: gm cc rng buc v khun dng d liu ( rng buc CHECK) hay cc
rng buc v bo ton d liu (PRIMARY KEY, FOREIGN KEY, UNIQUE)
V d: V d di y to mt bng c tn CUSTOMERS
create table customers
(
customerid int identity (1,1) primary key,
customername nvarchar(50) not null,
address nvarchar(100 ) null ,
birthday datetime null,
gender bit default('true') not null
)
Ct customerid c kiu d liu int, c ch nh thuc tnh identity(1,1) ngha l d liu
ct ny c thm t ng bt u t 1 v mi ln c dng mi thm vo, gi tr ct ny c
tng ln 1. Ct ny cng c ch nh lm kha chnh ca bng thng qua thuc tnh primary
key
Thuc tnh NULL/ NOT NULL ch ra rng ct c chp nhn/ khng chp nhn gi tr
NULL.
Ct gender c ch nh gi tr mc nh l true ngha l nu khng ch nh gi tr cho
ct ny th ct ny c gi tr l true
V d:
Thm dng mi vo bng customers vi gi tr truyn vo y cho cc ct
insert into customers
values('Nguyen Van An', '22 Nguyen Thien Thuat', '5/5/1988', 'True')
Thm dng mi vo bng customers s dng gi tr mc nh
insert into customers (customername, address, birthday)
values('Nguyen Van An', '22 Nguyen Thien Thuat', '5/5/1988')
Thm dng mi vo bng customers v khng truyn gi tr cho cc ct cho php gi tr
NULL
insert into customers (customername )
values('Nguyen Van An')
57
C th gp chung cc rng buc CHECK li trong mt rng buc duy nht nh sau
create table students
(
studentid int identity(1,1) primary key,
studentname nvarchar(50) not null,
address nvarchar(100) not null,
score1 tinyint not null ,
score2 tinyint not null,
58
Xo mt ct khi bng.
Thay i nh ngha ca mt ct trong bng.
Xo b hoc b sung cc rng buc cho bng
C php ca cu lnh ALTER TABLE nh sau:
ALTER TABLE tn_bng
ADD nh_ngha_ct |
ALTER COLUMN tn_ct
Nu b sung thm rng buc cho mt bng c d liu v rng buc cn b sung khng
c tho mn bi cc bn ghi c trong bng th cu lnh ALTER TABLE khng thc hin
c.
4.4 Xa bng
Khi mt bng khng cn cn thit , ta c th xo n ra khi c s d liu bng cu lnh
DROP TABLE. Cu lnh ny cng ng thi xo tt c nhng rng buc, ch mc, trigger lin
quan n bng .
Cu lnh c c php nh sau:
DROP TABLE tn_bng
Trong cc h qun tr c s d liu, khi xo mt bng bng lnh DROP
TABLE, ta khng th khi phc li bng cng nh d liu ca n. Do , cn phi cn thn khi
s dng cu lnh ny.
Cu lnh DROP TABLE khng th thc hin c nu bng cn xo ang c tham
chiu bi mt rng buc FOREIGN KEY. Trong trng hp ny, rng buc FOREIGN
KEY ang tham chiu hoc bng ang tham chiu n bng cn xo phi c xo trc.
Khi mt bng b xo, tt c cc rng buc, ch mc v trigger lin quan n
bng cng ng thi b xa theo. Do , nu ta to li bng th cng phi to li cc i tng
ny.
V d: xa bng ORDERS trc tin ta phi xa rng buc FOREIGN KEY t bng
ORDERDETAIL
alter table orderdetail
drop constraint fk_orderdetail_orders
Sau xa bng ORDERS
drop table orders
64
66
5 Th tc lu tr, hm v trigger
5.1 Th tc lu tr (Stored procedure)
Th tc lu tr l mt i tng trong CSDL, bao gm nhiu cu lnh T-SQL c tp
hp li vi nhau thnh mt nhm, v tt c cc lnh ny s c thc thi khi th tc lu tr
c thc thi.
Vi th tc lu tr, mt phn no kh nng ca ngn ng lp trnh c a vo trong
ngn ng SQL. Th tc lu tr c th c cc thnh phn sau:
Cc cu trc iu khin (IF, WHILE, FOR) c th c s dng trong th tc.
Bn trong th tc lu tr c th s dng cc bin nh trong ngn ng lp trnh nhm lu
gi cc gi tr tnh ton c, cc gi tr c truy xut c t c s d liu.
Mt tp cc cu lnh SQL c kt hp li vi nhau thnh mt khi lnh bn trong mt
th tc. Mt th tc c th nhn cc tham s truyn vo cng nh c th tr v cc gi tr thng
qua cc tham s (nh trong cc ngn ng lp trnh). Khi mt th tc lu tr c nh
ngha, n c th c gi thng qua tn th tc, nhn cc tham s truyn vo, thc thi
cc cu lnh SQL bn trong th tc v c th tr v cc gi tr sau khi thc hin xong.
Li ch ca vic s dng th tc lu tr:
SQL Server ch bin dch cc th tc lu tr mt ln v s dng li kt qu bin dch ny
trong cc ln tip theo tr khi ngi dng c nhng thit lp khc. Vic s dng li kt qu
bin dch khng lm nh hng n hiu sut h thng khi th tc lu tr c gi lin tc
nhiu ln.
Th tc lu tr c phn tch, ti u khi to ra nn vic thc thi chng nhanh hn nhiu
so vi vic phi thc hin mt tp ri rc cc cu lnh SQL tng ng theo cch thng
thng.
Th tc lu tr cho php chng ta thc hin cng mt yu cu bng mt cu lnh n
gin thay v phi s dng nhiu dng lnh SQL. iu ny s lm gim thiu s lu thng trn
mng.
Thay v cp pht quyn trc tip cho ngi s dng trn cc cu lnh SQL v trn cc i
tng c s d liu, ta c th cp pht quyn cho ngi s dng thng qua cc th tc lu tr,
nh tng kh nng bo mt i vi h thng.
Cc th tc lu tr tr v kt qu theo 4 cch:
S dng cc tham s output
S dng cc lnh tr v gi tr, cc lnh ny lun tr v gi tr s nguyn.
67
5.1.1 To th tc lu tr
Th tc lu tr c to thng qua c.u lnh CREATE PROCEDURE.
CREATE PROCEDURE tn_th_tc [(danh_sch_tham_s)]
[WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]
AS
Cc_cu_lnh_ca_th_tc
Trong :
WITH RECOMPILE: yu cu SQL Server bin dch li th tc lu tr mi khi c gi.
WITH ENCRYPTION: yu cu SQL Server m ha th tc lu tr.
Cc_cu_lnh_ca_th_tc: Cc lnh T-SQL. Cc lnh ny c th nm trong cp
BEGINEND hoc khng.
V d: Gi s cn thc hin cc cng vic theo th t nh sau:
Nhp mt n t hng mi ca khch hng c m khch hng l 3
Nhp cc chi tit n t hng cho n t hng trn.
thc hin cc cng vic trn chng ta cn cc cu lnh nh sau:
Trc tin nhp n t hng cho khch hng c m khch hng l 3
insert into orders
values(3, '7/22/2008')
Tip theo thm cc chi tit n t hng cho ha n ny. Gi s rng n t hng c
m l 4 v khch hng t mt mt hng c m l 1.
insert into orderdetail
values(4, 1, 10)
Cch vit nh trn c hn ch l: trong qu trnh lm vic s c rt nhiu n t hng
mi, do ngi dng s phi vit i vit li nhng cu lnh tng t nhau cho cc khch
hng khc nhau. Mt cch gii quyt vn ny l dng th tc lu tr v dng tham s
nhn cc thng tin thay i.
create procedure sp_InsertOrderAndOrderDetail
@customerid int,
@orderdate datetime,
@orderid int,
@itemid int,
68
@quantity decimal,
as
begin
insert into orders
values(@customerid, @orderdate)
insert into orderdetail
values(@orderid, @itemid, @quantity)
end
Thc hin th tc lu tr ny nh sau:
sp_InsertOrderAndOrderDetail 3, 22/7/2008, 4, 1, 10)
5.1.2 Li gi th tc
Th tc lu tr c gi theo cu trc
Tn_th_tc_lu _tr [danh_sch_tham_s]
Cn lu l danh sch tham s truyn vo trong li gi phi theo ng th t khai bo
cc tham s trong th tc lu tr.
Nu th tc c gi t mt th tc khc, thc hin bn trong mt trigger hay phi hp
vi cu lnh SELECT, cu trc nh sau;
Exec Tn_th_tc_lu _tr [danh_sch_tham_s]
end
5.1.4 Gi tr tr v trong th tc lu tr
Trong cc v d trc, nu i s truyn cho th tc khi c li gi n th tc l bin,
nhng thay i gi tr ca bin trong th tc s khng c gi li khi kt thc qu trnh thc
hin th tc.
V d: C th tc lu tr nh sau
create procedure sp_TestOutput
@a int,
@b int,
@c int
as
select @c = @a + @b
Thc thi th tc:
Declare @tong int
set @tong = 0
sp_TestOutput 100, 200, @tong
select @tong
Kt qu l 0.
S dng tham s OUTPUT
Trong trng hp cn phi gi li gi tr ca i s sau khi kt thc th tc, ta phi khai
bo tham s ca th tc theo c php nh sau:
@tn_tham_s kiu_d_liu OUTPUT
V d trn c vit li nh sau:
create procedure sp_TestOutput
@a int,
@b int,
@c int output
as
select @c = @a + @b
Thc thi th tc:
Declare @tong int
set @tong = 0
sp_TestOutput 100, 100, @tong output
select @tong
70
Kt qu l 200.
S dng lnh RETURN
Tng nh nh vic s dng tham s OUTPUT, cu lnh RETURN tr v gi tr cho i
tng thc thi stored procedure.
V d:
create procedure sp_TestReturn
as
begin
declare @out int
select @out = count(*)
from customers
return @out
end
Thc thi th tc lu tr
declare @a int
exec @a = sp_TestReturn
select @a
5.1.5 Tham s vi gi tr mc nh
Cc tham s c khai bo trong th tc c th nhn cc gi tr mc nh. Gi tr mc
nh s c gn cho tham s trong trng hp khng truyn i s cho tham s khi c li gi
n th tc.
Tham s vi gi tr mc nh c khai bo theo c php nh sau:
@tn_tham_s kiu_d_liu
gi_tr_mc_nh
V d:
create procedure sp_TestDefault
@customerid int = 3
as
begin
select * from customers
where customerid = @customerid
end
Thc thi th tc lu tr theo gi tr mc nh ca tham s.
sp_TestDefault
71
5.1.6 Sa i th tc
Khi mt th tc c to ra, ta c th tin hnh nh ngha li th tc bng cu lnh
ALTER PROCEDURE c c php nh sau:
ALTER PROCEDURE tn_th_tc [(danh_sch_tham_s)]
[WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]
AS
Cc_cu_lnh_ca_th_tc
Cu lnh ny s dng tng t nh cu lnh CREATE PROCEDURE. Vic sa i li
mt th tc c khng lm thay i n cc quyn cp pht trn th tc cng nh khng
tc ng n cc th tc khc hay trigger ph thuc vo th tc ny.
5.1.7 Xa th tc
xo mt th tc c, ta s dng cu lnh DROP PROCEDURE vi c php
nh sau:
DROP PROCEDURE tn_th_tc
Khi xo mt th tc, tt c cc quyn cp cho ngi s dng trn th tc cng ng
thi b xo b. Do , nu to li th tc, ta phi tin hnh cp pht li cc quyn trn th tc
.
FUNCTION tn_hm
73
V d:
select CUSTOMERNAME, dbo.f_thu(BIRTHDAY)
from customers
74
customername nvarchar(50),
orderdate datetime
)
as
begin
if @customerid = 0
insert into @myCustomers
select c.customerid, c.customername, o.orderdate
from customers c inner join orders o on o.customerid = c.customerid
else
insert into @myCustomers
select c.customerid, c.customername, o.orderdate
from customers c inner join orders o on c.customerid = o.customerid
where c.customerid = @customerid
return
end
Vic gi hm multi statement UDF cng tng t cc loi hm khc
select * from f_SelectCustomer(0)
5.2.4 Thay i hm
Dng lnh ALTER FUNCTION thay i nh ngha hm. Cu trc ca cu lnh
ALTER FUNCTION tng t nh CREATE FUNCTION
V d:
alter function f_SelectCustomer
(@customerid int)
returns table
as
return (select * from customers
76
5.2.5 Xa hm
Dng lnh DROP FUNCTION xa hm. Cu trc lnh DROP FUNCTION nh sau
DROP FUNCTION tn_hm
V d:
drop function f_thu
Tng t nh th tc lu tr, khi hm b xa cc quyn cp cho ngi dng trn hm
cng b xa. Do khi nh ngha li hm ny, ta phi cp li quyn cho cc ngi dng.
5.3 Trigger
Trigger l mt dng c bit ca th tc lu tr, c thc thi mt cch t ng khi c s
thay i d liu (do tc ng ca cu lnh INSERT, UPDATE, DELETE) trn mt bng no
.
5.3.1 Cc c im ca trigger
Trigger ch thc thi t ng thng qua cc s kin m khng thc hin bng tay.
Trigger s dng c vi khung nhn.
Khi trigger thc thi theo cc s kin Insert hoc Delete th d liu khi thay i s c
chuyn sang cc bng INSERTED v DELETED, l 2 bng tm thi ch cha trong b nh,
cc bng ny ch c s dng vi cc lnh trong trigger. Cc bng ny thng c s dng
khi phc li phn d liu thay i (roll back).
Trigger chia thnh 2 loi INSTEAD OF v AFTER: INSTEAD OF l loi trigger m hot
ng ca s kin gi trigger s b b qua v thay vo l cc lnh trong trigger c thc
hin. AFTER trigger l loi ngm nh, khc vi loi INSTEAD OF th loi trigger ny s thc
hin cc lnh bnh trong sau khi thc hin xong s kin kch hot trigger.
77
Khi xy ra thay i dy chuyn d liu gia cc bng vi nhau (khi d liu bng ny thay
i th d liu trong bng khc cng c thay i theo).
Hot ng
Bng INSERTED
Bng DELETED
INSERT
d liu c insert
khng c d liu
DELETE
khng c d liu
d liu b xa
UPDATE
d liu c cp nht
79
Gi s ngi qun l mun thay i s lng bn mt hng LAPTOP trong bng SALE
ln thm 5 n v. Nh vy t kt qu v d 2, ta thy cn phi gim s lng LAPTOP trong
bng ITEMSFORSALE xung 10 n v. Tuy nhin, trong thc t khi s lng cc dng trong
bng SALE rt ln, khi phi s dng trigger:
if exists (select name from sysobjects
where name = 't_DecreaseSumQuantityOfItemForSale')
drop trigger t_DecreaseSumQuantityOfItemForSale
go
create trigger t_DecreaseSumQuantityOfItemForSale
on SALE
for update
as
if update(salequantity)
update ITEMSFORSALE
set itemsforsale.quantity = itemsforsale.quantity (select sum(inserted.salequantity - deleted.salequantity)
from deleted inner join inserted
on deleted.saleid = inserted.saleid
where inserted.itemid = itemsforsale.itemid)
where itemsforsale.itemid in (select inserted.itemid
from inserted)
Thc hin cp nht cho bng SALE:
update sale
set salequantity = salequantity + 10
where itemid = 1
rollback tran
84
85
86
88
Click OK
89
90
91
Click OK hai ln
92
93
7.1.1 Hm ISNUMERIC
Hm isNumeric kim tra mt gi tr c phi thuc kiu d liu s hay khng.
V d: Cu lnh di y tr v tn khch hng, v mt ct c tn NUMERIC. Ct ny s
mang gi tr 0 nu a ch khch hng khng phi l s v ngc li
select CUSTOMERNAME, isnumeric(ADDRESS) as ISNUMERIC
from customers
7.1.2 Hm ROUND
Hm ROUND tr v mt gi tr s, c lm trn theo mt i ch nh
Cu trc hm ROUND nh sau:
ROUND ( s_lm_trn , _di_lm_trn )
Khi s dng hm ROUND cn lu :
s_lm_trn phi c kiu d liu s (numeric data type) nh int, float, decimal tr kiu
d liu dng nh phn. Cho d s_lm_trn thuc kiu d liu g, kt qu hm ROUND lun
tr v kiu s nguyn.
Nu _di_lm_trn l s m v ln hn s ch s pha trc du thp phn th hm
ROUND tr v 0.
V d 1:
94
V d 2:
select ROUND(123.4545, 2),ROUND(123.45, -2)
V d 3:
SELECT ROUND(150.75, 0), ROUND(150.75, 0, 1)
7.2.1 Hm LEFT
Hm LEFT tr v mt chui k t c chiu di c ch nh tnh t bn tri ca chui.
V d:
select left('Nha Trang', 5)
7.2.2 Hm RIGHT
Hm RIGHT tng t hm LEFT nhng tnh t bn phi ca chui
V d:
select right('Nha Trang', 5)
7.2.3 Hm SUBSTRING
Hm STRING trch xut mt chui con t mt chui cho trc.
Cu trc hm SUBSTRING nh sau:
SUBSTRING (chui_ban_u, v_tr_bt_u, chiu_di_chui_con)
V d 1:
select substring ('Nha Trang', 2, 5)
95
V d 2:
Select substring(Nha Trang, -2, 5)
7.2.4 Hm LEN
Hm LEN tr v chiu di mt chui
V d:
Select len(Nha Trang)
7.2.5 Hm REPLACE
Hm REPLACE thay th mt chui bi mt chui khc
V d 1: Cu lnh di y thay th ch Nha trong chui Nha Trang bng ch nha
Select replace(Nha Trang, Nha, nha)
V d 2:
select replace(ADDRESS, 'Minh', 'Ninh')
from customers
7.2.6 Hm STUFF
Hm STUFF thay th mt s lng xc nh cc k t trong mt chui bng mt chui
khc bt u t mt v tr c ch nh.
V d:
96
7.2.7 Hm LOWER/UPPER
Hm LOWER chuyn cc k t hoa trong chui thnh cc k t thng. Hm UPPER
chuyn cc chui k t thng trong chui thnh cc k t hoa.
V d:
select lower('Nha Trang'), upper('Nha Trang')
7.2.8 Hm LTRIM/RTRIM
Hm LTRIM ct cc khong trng bn tri ca chui, hm RTRIM ct khong trng bn
phi chui.
V d:
declare @llen int
declare @rlen int
declare @len int
select @llen = len(ltrim(' Nha Trang')),
@rlen = len(rtrim('Nha Trang ')),
@len = len('Nha Trang')
select @llen, @rlen, @len
7.3.3 Hm DATEPART
Trong qu trnh lm vic vi cc CSDL, i lc ta mun bit xem mt ngy no thuc
qu my trong nm, hay thuc tun th my trong thng. Hm DATEPART gip gii quyt cc
yu cu trn mt cch d dng.
Cu trc hm DATEPART nh sau:
DATEPART (yu_cu_trch_xut, gi_tr_trch_xut)
gi_tr_trch_xut l mt gi tr thuc kiu datetime.
yu_cu_trch_xut: ngy, thng, nm, qu,.
Khi c mt yu cu trch xut no , chng ta s c cc ch vit tt tng ng vi cc
yu cu . Bng di y m t cc yu ch vit tt v cc yu cu trch xut tng ng.
ngha
Ch vit tt
Nm
yy, yyyy
Qu
qq,q
Thng
mm,m
dy,y
Ngy
dd,d
Tun
wk,ww
dw
Gi
hh
Pht
mi,n
Giy
ss,s
V d:
select datepart(yyyy, orderdate)as YEAROFORDERDATE,
datepart(qq, orderdate)as QUARTEROFORDERDATE,
98
7.3.4 Hm DATENAME
Tng t hm DATEPART nhng hm DATENAME tr v mt chui k t
V d:
select datename(yyyy, orderdate)as YEAROFORDERDATE,
datename(qq, orderdate)as QUARTEROFORDERDATE,
datename(m, orderdate) as MONTHOFORDERDATE,
datename(wk, orderdate) as WEEKOFORDERDATE,
datename(d, orderdate) as DATEOFORDERDATE,
datename(dy, Orderdate), datename(dw, orderdate)
from orders
Nm 4 ch s
Output
0 hoc 100
101
mm/dd/yy
102
yy.mm.dd
99
103
dd/mm/yy
104
dd.mm.yy
105
dd-mm-yy
106
dd mon yy
107
Mon dd, yy
108
hh:mm:ss
9 hoc 109
10
110
mm-dd-yy
11
111
yy/mm/dd
12
112
yymmdd
13 hoc 113
114
hh:mi:ss:mmm(24h)
14
V1 d:
select
CUSTOMERNAME,
as
money),1)
as
100
101
102
th hin ca SQL Server 2005 ang c s dng (running). kch hot dch v SQL Server
Browser, cn lm theo cc bc sau:
Click Start -> Programs -> Microsoft SQL Server 2005 -> Configuration Tools, click
SQL Server Surface Area Configuration.
Trong trang SQL Server 2005 Surface Area Configuration, click Surface Area
Configuration for Services and Connections.
Trong trang Surface Area Configuration for Services and Connections, click SQL Server
Browser, click Automatic for Startup type, click Apply.
Lu : tng t nh dch v MSSQLSERVER, nu chn startup type l Automatic th
dch v SQL Server Browser s c khi ng khi Windows khi ng
Kim tra tnh trng dch v trong Service status. Sau click Start nu dch v ny ang
b Stop.
Lu : Thc hin cc bc trn lm tng cc nguy c cho h thng v h thng s hin th
thng tin ca cc th hin ca SQL Server ng chy trn h thng. Cc nguy c ny c th
c gim thiu bng cch khng kch hot dch v SQL Server Browser v kt ni vo th
hin ca SQL Server thng qua mt port. Chi tit c th tham kho Microsoft Book Online
theo cc ch sau:
SQL Server Browser Service
Connecting to the SQL Server Database Engine
Client Network Configuration
Trong trang SQL Server Configuration Manager, click SQL Server Services, right-click
tn th hin, v click Properties.
Trong trang SQL Server Browser Properties, click tab Advanced, xc nh instanceID
trong danh sch thuc tnh, v click OK.
Lu : Chng ta c th c nhiu th hin SQL Server, do chng ta phi xc nh ng
instanceID no chng tao mun to ngoi l.
m Windows Firewall, click Start, click Run, nh firewall.cpl, v click OK.
To ngoi l cho SQL Server 2005 trong Windows Firewall
Trong Windows Firewall, click tab Exceptions, sau click Add Program.
Trong ca s Add a Program window, click Browse.
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\sqlservr.exe, click Open,
v click OK.
Lu : ng dn c th khc nhau ty thuc vo th mc ci t ca SQL Server 2005.
MSSQL.1 l ni lu tr cho instanceID chng ta thu c trong bc trn.
Lp li cc bc trn cho mi th hin ca SQL Server 2005 cn thit lp ngoi l.
To ngoi l cho dch v SQL Server Browser trong Windows Firewall
Trong Windows Firewall, click tab Exceptions, v click Add Program.
Trong ca s Add a Program, click Browse.
C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe, click Open, v click
OK.
Lu : ng dn c th thay i ty thuc vo th mc ci t ca SQL Server 2005.
{
System.Data.SqlClient.SqlConnection conn =
new System.Data.SqlClient.SqlConnection ();
// TODO Xy dng chui kt ni
conn.ConnectionString =
"integrated security=true;data source=tn_SQLSERVER;" +
"persist security info=False;initial catalog=tn_CSDL";
try
{
conn.Open();
// Xy dng code tng tc vi CSDL y
}
catch (Exception ex)
{
MessageBox.Show("Failed to connect to data source");
}
finally
{
conn.Close();
}
}
Trong VB.NET
Public Sub ConnectToSql()
Dim conn As New SqlClient.SqlConnection
' TODO Xy dng chui kt ni
conn.ConnectionString = & _
"integrated security=true;data source=tn_SQL Server;" & _
"persist security info=False;initial catalog=tn_CSDL"
Try
conn.Open()
' Xy dng code tng tc vi CSDL y
Catch ex As Exception
105
8.2.2 VB 6
V d di y minh ha vic xy dng ng dng CSDL bng VB6. Gi s chng ta c
CSDL tn l Test, SQL Server l .\\SQLExpress, User l sa, Password l 1234.
Private Sub Command1_Click()
Dim connectionString As String
Dim commandString As String
Dim sqlConnection As ADODB.Connection
106
Dim rs As Recordset
connectionString="PROVIDER=SQLOLEDB;
DATA
SOURCE=.\SQLEXPRESS;
107
108