Professional Documents
Culture Documents
GT Sqlserver2005
GT Sqlserver2005
Mc lc .................................................................................................................................1
1
To bng mi .................................................................................................17
Xa bng, xa CSDL ..................................................................................... 19
3.1.7
3.2.3 Xa d liu.....................................................................................................54
4 Ngn ng nh ngha d liu DDL............................................................................56
4.1 To bng ................................................................................................................56
4.2 Cc loi rng buc.................................................................................................58
4.2.1 Rng buc CHECK........................................................................................ 58
4.2.2 Rng buc PRIMARY KEY ..........................................................................59
4.2.3 Rng buc FOREIGN KEY ..........................................................................60
4.3 Sa i nh ngha bng ........................................................................................ 61
4.4 Xa bng ...............................................................................................................63
4.5 Khung nhn - VIEW .............................................................................................. 63
4.6 Thm, cp nht, xa d liu trong VIEW ............................................................. 65
4.7 Thay i nh ngha khung nhn ...........................................................................65
4.8 Xa khung nhn .....................................................................................................66
5 Th tc lu tr, hm v trigger..................................................................................... 67
5.1 Th tc lu tr (Stored procedure) .......................................................................67
5.1.1 To th tc lu tr ......................................................................................... 68
5.1.2 Li gi th tc................................................................................................ 69
5.1.3 Bin trong th tc lu tr ..............................................................................69
5.1.4 Gi tr tr v trong th tc lu tr.................................................................70
5.1.5 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 Hm do ngi dng nh ngha (User Defined Function -UDF)........................... 72
5.2.1 Hm v hng - Scalar UDF .........................................................................73
5.2.2 Hm ni tuyn - Inline UDF ..........................................................................74
5.2.3 Hm bao gm nhiu cu lnh bn trong Multi statement UDF .................. 75
5.2.4 Thay i hm .................................................................................................76
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
5.3.5
5.3.6
7.4
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 b n 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 d ng trong
vic pht trin cc ng dng h ng CSDL. SQL Server 2005 Express Edition c t do s
dng trong cc ng dng th ng mi v d dng cp nht ln cc phin bn cao hn khi cn
thit.
Ci t SQL Server Management Studio Express: SQL Server Managemen t 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
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.
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 n o s c quy nh lc nh ngha bng.
Create table Nhanvien
(
MANV NVARCHAR(10)
NOT NULL,
HOTEN NVARCHAR(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 nguy n 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 k iu
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
V d:
select [M khch hng] = Customerid,
customername as [Tn khch hng],
address [a ch]
from Customers
33
Trong mnh FROM c th s dng b danh (alias) nhm l m 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
ngha
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 tr ng 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 t ruy vn tun theo th t ca chng
trong bng d liu hoc c sp xp theo ch mc (nu tr n bng c ch mc). Trong tr ng
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 h ng theo th t tui gim dn.
select CUSTOMERNAME, year(getdate()) - year(BIRTHDAY) as AGE, ADDRESS
from Customers
order by AGE DESC
Ta c th ch nh s th t ca ct cn c sp xp. Cu lnh v d tr n c th c
vit li nh sau:
select CUSTOMERNAME, year(getdate()) - year(BIRTHDAY) as AGE, ADDRESS
from Customers
order by 2 DESC
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_c t]
[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_c t]
[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 th nh phn ca php hp xut hin nhng d ng
d liu ging nhau th trong kt qu truy vn ch gi li mt d ng. 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 nguy n 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 h p 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 h n (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 th nh 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 d ng n
php ni. Mt cu lnh ni kt hp cc d ng 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 nhi n 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 d ng 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 v o 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
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
Nu mun hin s tin khch h ng 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
SUMTOTAL
from
money),1)
as
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 n y
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 d ng 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 li n quan n cc bng khng phi l bng cn
xa d liu, ta phi s dng th m mnh FROM v sau l danh sch tn cc b ng .
Trong trng hp ny, trong mnh WHERE ta ch nh th m 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 tr ng (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 nhn g 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
57
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 kiu_d_liu [NULL | NOT NULL]
DROP COLUMN tn_ct |
ADD CONSTRAINT tn_rng_bu c nh_ngha_rng_buc
DROP CONSTRAINT tn_rng_bu c
V d 1: Thm mt ct mi vo bng ORDERS
alter table orders
add description nvarchar(100) not null
V d 2: Thay i nh ngha ct desciption
alter table orders
alter column description nvarchar(200) null
V d 3: Thm rng buc CHECK vo ct decription
alter table orders
add constraint chk_descriptionlength CHECK (len(description) > 10)
V d 4: Xa rng buc CHECK
alter table orders
drop chk_descriptionlength
V d 5: Xa ct description
alter table orders
drop column description
V d 6: Thm mt ct mi vo bng orders v thm rng buc cho ct ny
alter table orders
add
description nvarchar(100) null,
constraint chk_descriptionlength CHECK (len(description) > 0)
Nu b sung thm mt ct vo bng v trong bng c t nht mt bn ghi th ct mi
cn b sung phi cho php chp nhn gi tr NULL hoc phi c gi tr mc nh.
Mun xo mt ct ang c rng buc bi mt rng buc hoc ang c tham chiu
bi mt kho ngoi, ta phi xo rng buc hoc kho ngoi trc sao cho trn ct khng cn
bt k mt rng buc v khng cn c tham chiu bi bt k kho ngo i no.
62
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 r ng 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 tr ng 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 r ng 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 t ng
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 l u tr
c thc thi.
Vi th tc lu tr, mt phn no kh nng ca ngn ng lp tr nh 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 th nh mt khi lnh bn trong mt
th tc. Mt th tc c th nhn cc tham s truyn v o 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 v o, 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 l u 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 l u 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 h n nhiu
so vi vic phi thc hin mt tp ri rc cc cu lnh SQL t ng ng theo cch thng
thng.
Th tc lu tr cho php chng ta thc hin c ng 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 ng i s dng trn cc cu lnh SQL v trn cc i
tng c s d liu, ta c th cp pht quyn c ho ngi s dng thng qua cc th tc l u 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 n y 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 c u 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 tr n 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 t ng t nhau cho cc khch
hng khc nhau. Mt cch gii quyt vn n y l dng th tc lu tr v dng tham s
nhn cc thng tin thay i.
create procedure sp_InsertOrderAndOrderD etail
@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 b n 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 c ho 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 tr nh 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 v o 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 h nh cp pht li cc quyn trn th tc
.
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_SelectCustome r(0)
5.2.4 Thay i hm
Dng lnh ALTER FUNCTION thay i nh ngha h m. 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 h m. 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 ng i dng trn hm
cng b xa. Do khi nh ngha li hm ny, ta phi cp li quyn cho cc ng i dng.
5.3 Trigger
Trigger l mt dng c bit ca th tc l u tr, c thc thi mt cch t ng khi c s
thay i d liu (do tc ng ca cu lnh INSER T, 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 n y 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 n y 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
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 d i 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 tr c.
Cu trc hm SUBSTRING nh sau:
SUBSTRING (chui_ban_u, v_tr_bt_u, chiu_d i_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 th nh 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 ng y 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 QUARTEROFORDER DATE,
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,
convert (varchar, BIRTHDAY, 103) as BIRTHDAY, ADDRESS
from Customers
where Customername = 'Le Thi Hoa'
and year(getdate()) - year(BIRTHDAY) > 20
Hm CONVERT v hm CAST c th s dng kt hp vi nhau cho kt qua nh
mong mun.
V d:
select c.CUSTOMERID, c.CUSTOMERNAME,
convert(varchar(20),cast(SUM(i.UNITPRICE*od.QUANTITY)
as
money),1)
as
SUMTOTAL
from
customers c inner join orders o on o.customerid = c.customerid
inner join orderdetail od on o.or derid = od.orderid
inner join items i on i.itemid = od.itemid
group by c.customerid, c.customername
100
101