You are on page 1of 241

TRNG I HC HNG HI

KHOA CNG NGH THNG TIN

BI GING
H QUN TR C S D LIU
Bin son: K.S Nguyn Vng Thnh

Hi Phng 2008
1

B GIAO THNG VN TI
TRNG I HC HNG HI
KHOA CNG NGH THNG TIN
B MN H THNG THNG TIN

BI GING
H QUN TR C S D LIU

TN HC PHN : C S D LIU
M HC PHN : 17402
TRNH O TO : I HC CHNH QUY
DNG CHO SV NGNH : CNG NGH THNG TIN

HI PHNG - 2008
2
Tn hc phn: H qun tr C s d liu Loi hc phn: 4
B mn ph trch ging dy: H thng Thng tin Khoa ph trch: CNTT.
M hc phn: 17402 Tng s TC: 4

TS tit L thuyt Thc hnh/ Xemina T hc Bi tp ln n mn hc


90 45 45 0 x 0

iu kin tin quyt:


Khng yu cu.
Mc tiu ca hc phn:
Cung cp cho sinh vin nhng khi nim c bn v h qun tr c s d liu, vai tr v chc
nng ca h qun tr c s d liu cng nh qu trnh tng tc gia h qun tr c s d liu vi
cc phn mm ng dng c s d liu. Gip sinh vin tip cn vi nn tng h qun tr c s d
liu Microsoft SQL Server.
Ni dung ch yu:
Khi nim v CSDL v h qun tr CSDL; Cc thnh phn c bn trong MS SQL Server;
Ngn ng T-SQL v cc i tng CSDL; Cc tc v qun tr h thng.
Ni dung chi tit:
PHN PHI S TIT
TN CHNG MC TS LT BT TH KT
Chng 1. Gii thiu 6
1.1. Mt s khi nim c bn
1.2. Gii thiu v SQL Server v m hnh Client/Server
1.3. Ci t v cu hnh SQL Server
1.4. Cc thnh phn c bn trong SQL Server
Chng 2. Lm vic vi CSDL v bng 9 1
2.1. Lm vic vi CSDL
2.1.1. T chc tp tin trong CSDL SQL Server
2.1.2. nh ngha CSDL
2.1.3. Sa i CSDL
2.1.4. Xa CSDL
2.2. Lm vic vi bng d liu
2.2.1. Cc kiu d liu c bn
2.2.2. Rng buc (Constraint) v thuc tnh ct
2.2.3. nh ngha bng d liu
2.2.3. Sa i bng d liu
2.2.4. Xa bng d liu
2.3. Lm vic vi cc bn ghi
2.3.1. Thm bn ghi mi (Insert)
2.3.2. Cp nht bn ghi (Update)
2.3.3. Xa bn ghi (Delete)
2.4. Khi nim v ch mc (Index)
Chng 3. Truy vn d liu v bng o (View) 9 1
3.1. Cu trc truy vn c bn
3.1.1. Cu lnh SELECT
3.1.2. Mnh WHERE v biu thc iu kin
3.1.3. Mt s hm thng dng
3.1.4. Truy vn thng k vi GROUP BY v HAVING
3.1.5. Sp xp vi ORDER BY
3.2. Truy vn d liu t nhiu bng
3.2.1. Inner Join
3.2.2. Left Outer Join
3
PHN PHI S TIT
TN CHNG MC TS LT BT TH KT
3.2.3. Right Outer Join
3.2.4. Full Outer Join
3.2.5. Cross Join
3.2.6. Self Join
3.2.7. Non - Equal Join
3.2.8. Union
3.3. Truy vn lng nhau (Subquery)
3.3.1. Nested Scalar Subquery
3.3.2. Correlated Subquery
3.4. Bng o (View)
3.4.1. nh ngha View
3.4.2. Sa i View
3.4.3. Xa View
Chng 4. Th tc thng tr v hm ngi dng 9 1
4.1. Lp trnh vi T - SQL
4.2. Th tc thng tr (Stored Procedure)
4.3. Hm ngi dng nh ngha (User Defined Fuction)
Chng 5. Trigger v Transaction 6
5.1. Trigger v ng dng ca Trigger
5.1.1. After Trigger
5.1.2. Instead Of Trigger
5.2. Cc loi Transaction v ng dng
5.2.1. Transaction t ng
5.2.2. Transaction tng minh
5.2.3. Transaction n
5.2.4. Transaction lng nhau
Chng 6: Cc tc v qun tr h thng 6
6.1. Qun l ng k SQL Server (Server Registration)
6.2. Bo mt v phn quyn ngi dng
6.3. Sao lu (Backup) v phc hi (Restore) d liu
6.4. Hoch nh tc v qun tr
Nhim v ca sinh vin:
Tham d cc bui hc l thuyt v thc hnh, lm cc bi tp c giao, lm cc bi thi
gia hc phn v bi thi kt thc hc phn theo ng quy nh.
Ti liu hc tp:
1. Dng Quang Thin, SQL Server 2000: Lp trnh T - SQL, NXB Vn ha Si Gn, 2007.
2. Paul Turley & Dan Wood, Beginning Transact-SQL with SQL Server 2000 and 2005, Wrox
Press, 2006.
3. Brian Knightet al, Professional SQL Server 2005 Administration, Wrox Press, 2007.
4. Ray Rankins, Paul Bertucci, Chris Gallelli, Alex T.Silverstein, Microsoft SQL Server 2005
Unleashed, Sams Publishing, 2007.
Hnh thc v tiu chun nh gi sinh vin:
Hnh thc thi: thi vit hoc vn p.
Tiu chun nh gi sinh vin: cn c vo s tham gia hc tp ca sinh vin trong cc bui
hc l thuyt v thc hnh, kt qu lm cc bi tp c giao, kt qu ca cc bi thi gia
hc phn v bi thi kt thc hc phn.
Thang im: Thang im ch A, B, C, D, F.
im nh gi hc phn: Z = 0,4X + 0,6Y.
4
Bi ging ny l ti liu chnh thc v thng nht ca B mn H thng Thng tin, Khoa
Cng ngh Thng tin v c dng ging dy cho sinh vin.
Trng B mn Ngy ph duyt: / / .
MC LC

MC LC..................................................................................................................................................................... 1

M U ....................................................................................................................................................................... 4

PHN I. QUN TR SQL SERVER ........................................................................................................................... 4

BT U VI SQL SERVER ................................................................................................................................ 4


TM HIU V H QUN TR CSDL SQL SERVER .......................................................................................... 4
M HNH HOT NG CA SQL SERVER TRN MNG MY TNH. ......................................................... 6
CC THNH PHN CA SQL SERVER. ........................................................................................................ 11
CC THNH PHN CA SQL SERVER. ........................................................................................................ 11
CI T SQL SERVER. ................................................................................................................................... 13
QUN TR SERVER ............................................................................................................................................. 22
INSTANCE ........................................................................................................................................................ 22
IU KHIN CC DCH V CA SQL SERVER. ......................................................................................... 22
QUN TR SERVER.......................................................................................................................................... 26
THIT LP KT NI N SERVER. .............................................................................................................. 27
CU HNH KT NI MNG CA SERVER. .................................................................................................. 37
QUN TR CC CLIENT.................................................................................................................................. 38
QUN TR C S D LIU................................................................................................................................. 45
CU TRC C S D LIU. ......................................................................................................................... 45
QUN L C S D LIU. ............................................................................................................................ 50
BNG D LIU TABLE.................................................................................................................................... 58
CC CHUN TC. ........................................................................................................................................... 58
THIT K BNG D LIU. ............................................................................................................................ 60
TO BNG D LIU. ...................................................................................................................................... 69
KHA INDEX ....................................................................................................................................................... 77
THIT K KHA INDEX. ................................................................................................................................ 77
TO KHA INDEX. ......................................................................................................................................... 79
XA INDEX. ..................................................................................................................................................... 81
KHUNG NHN VIEW ......................................................................................................................................... 82
KHI NIM KHUNG NHN. ............................................................................................................................ 82
TO KHUNG NHN.......................................................................................................................................... 82
S DNG VIEW............................................................................................................................................... 84
TH TC LU TR ............................................................................................................................................. 86
KHI NIM TH TC LU TR V HM.................................................................................................... 86
PHN LOI TH TC LU TR. .................................................................................................................. 87
THIT LP TH TC LU TR. ................................................................................................................... 88
SA, XA TH TC........................................................................................................................................ 95
TRIGGER............................................................................................................................................................... 96
KHI NIM TRIGGER. .................................................................................................................................... 96
NHNG TRNG HP S DNG TRIGGER............................................................................................... 96
C IM CA TRIGGER. ............................................................................................................................ 96
TO TRIGGER. ................................................................................................................................................ 97
SA, XA TRIGGER...................................................................................................................................... 101
XUT NHP D LIU .................................................................................................................................... 102
SERVER LIN KT LINKED SERVER. ...................................................................................................... 102
S DNG BCP V BULK INSERT NHP D LIU.................................................................................... 110
DETTACH V ATTACH C S D LIU. ................................................................................................... 113
IMPORT V EXPORT C S D LIU. ...................................................................................................... 115
EXPORT XUT D LIU. .......................................................................................................................... 119
SAO LU, KHI PHC D LIU ..................................................................................................................... 120
NHNG L DO PHI SAO LU V KHI PHC D LIU. ..................................................................... 120
CC LOI BACKUP. ..................................................................................................................................... 120
CC M HNH PHC HI D LIU. ......................................................................................................... 121
SAO LU C S D LIU - BACKUP DATABASE. ................................................................................... 122
KHI PHC D LIU RESTORE DATABASE. ........................................................................................ 123
CHNG X. PHN QUYN, BO MT ............................................................................................................. 125
CH BO MT SECURITY MODE...................................................................................................... 125
SERVER ROLE, DATABASE ROLE. .............................................................................................................. 127
QUN TR NGI DNG............................................................................................................................. 131
NHN BN D LIU......................................................................................................................................... 133
GII THIU V NHN BN D LIU......................................................................................................... 133
CU HNH PUBLISHER V DISTRIBUTOR. ............................................................................................... 139
TO PUBLICATION....................................................................................................................................... 141
TO PUSH SUBSCRIPTION.......................................................................................................................... 143
TO PULL SUBSCRIPTION. ......................................................................................................................... 145
THC HIN NG B D LIU. ............................................................................................................... 147

PHN II. CU LNH T-SQL ................................................................................................................................. 148

NH NGHA D LIU (DATA DEFINITION LAGUAGE - DDL). ............................................................. 148


THAO TC VI D LIU (DATA MANIPULATION LANGUAGE - DML). ................................................ 153
TRUY VN D LU. ...................................................................................................................................... 165

2
TO BNG BNG LNH SELECT INTO. ..................................................................................................... 173
LNH COMPUTE BY. .................................................................................................................................... 173
TON T UNION........................................................................................................................................... 174
TRUY VN D LIU T NHIU BNG. ...................................................................................................... 175
TRUY VN TNG HP.................................................................................................................................. 183
TRUY VN LNG NHAU. .............................................................................................................................. 186
UPDATE, DELETE, INSERT VI LNH TRUY VN LNG NHAU. ........................................................... 189
LNH READTEXT C TEXT, IMAGE. .................................................................................................... 190
THAO TC D LIU NGOI. ....................................................................................................................... 190
MT S HM C BN.................................................................................................................................. 193
TRANSACTION PHIN GIAO DCH.......................................................................................................... 199
LOCKING KHA. ....................................................................................................................................... 203
GRAND GN QUYN. ................................................................................................................................ 206
REVOKE TC QUYN............................................................................................................................. 211
DENY T CHI QUYN. ........................................................................................................................... 211
TR GIP. ..................................................................................................................................................... 212

PHN III. PHT TRIN NG DNG VI SQL SERVER................................................................................ 213

GII THIU. .................................................................................................................................................. 213


KT NI VI SQL SERVER BNG ADO. ..................................................................................................... 213
KT NI VI SQL SERVER BNG SQL-DMO............................................................................................. 233

3
Phn 1. QUN TR SQL SERVER
BT U VI SQL SERVER

TM HIU V H QUN TR CSDL SQL SERVER


Gii thiu SQL Server.
SQL Server l h thng qun tr c s d liu quan h (Relational DataBase
Management System- RDBMS) s dng cc lnh gio chuyn Transaction-SQL
trao i d liu gia Client Computer v Server Computer.
SQL Server c mt s c tnh sau:
Cho php qun tr mt h CSDL ln (ln n vi tega byte), c tc x l
d liu nhanh p ng yu cu v thi gian.
Cho php nhiu ngi cng khai thc trong mt thi im i vi mt CSDL
v ton b qun tr CSDL (ln n vi chc ngn user).
C h thng phn quyn bo mt tng thch vi h thng bo mt ca cng
ngh NT (Network Technology), tch hp vi h thng bo mt ca
Windows NT hoc s dng h thng bo v c lp ca SQL Server.
H tr trong vic trin khai CSDL phn tn v pht trin ng dng trn
Internet
Cho php lp trnh kt ni vi nhiu ngn ng lp trnh khc dng xy dng
cc ng dng c th (Visual Basic, C, C++, ASP, ASP.NET, XML,...).
S dng cu lnh truy vn d liu Transaction-SQL (Access l SQL, Oracle
l PL/SQL).

Cc n bn ca SQL Server.
SQL Server c cc n bn chnh sau:
Enterpise Manager: L n bn y ca SQL Server c th chy trn
32CPU v 64GB RAM. C cc dch v phn tch d liu Analysis Service.
Standard: Ging nh Enterprise nhng b hn ch mt s tnh nng cao cp,
c th chy trn 2CPU, 4GB RAM.

4
Personal: Phin bn ny ch yu chy trn PC, nn c th chy trn cc h
iu hnh Windows 9x, Windows XP, Windows 2000, Windows 2003
Developer: L phin bn tng t nh Enterprise nhng b gii hn bi s
user kt ni n.
Desktop Engine: L phin bn mt engine ch chy trn desktop v khng c
giao din ngi dng (GUI), kch thc CSDL gii hn bi 2GB.
Win CE: S dng cho cc ng dng chy trn Windows CE.
Trial: Phin bn dng th, b gii hn bi thi gian.
SQL Client: L phin bn dnh cho my khch, khi thc hin khai thc s
thc hin kt ni n phin bn SQL Server, phin bn ny cung cp giao
din GUI khai thc cho ngi s dng.
SQL Connectivity only: L phin bn s dng ch cho cc ng dng kt
ni n SQL Server, phin bn ny khng cung cp cng c GUI cho ngi
dng khai thc SQL Server.
Cc phin bn ny c ci t ph thc vo b ci t m bn chn hoc la chn
khai ci t (v d phin bn Enterprise, Standard, Personal, bn phi chn theo
b ci t, phin bn SQL Client, Connectivity, do bn chn trong cc hp thoi
trong qu trnh ci t).

Mt s tnh nng ca Enterprise manager.


D ci t
H tr m hnh Client/Server.
Thch hp trn cc h iu hnh Windows.
Hot ng vi nhiu giao thc truyn thng.
H tr dch v Data Warehousing.
Thch hp vi chun ANSI/ISO SQL-92.
H tr nhn bn d liu.
Cung cp dch v tm kim Full-Text.
Sch tr gip- Book Online.

5
M HNH HOT NG CA SQL SERVER TRN MNG MY TNH.
M hnh chung SQL Server trn mng.
SQL Server l h qun tr CSDL hot ng trn mng, c th thc hin trao
i d liu theo nhiu m hnh mng khc nhau, nhiu giao thc v phng thc
truyn tin khc nhau.

Trong s trn th hin ba kiu kt ni ng dng n SQL Server:


Kt ni trn Desktop: C th trn cng my tnh vi SQL Server hoc kt ni
qua mng ni b.

6
Kt ni qua mng din rng: Thng qua ng truyn mng xa kt ni n
SQL Server.
Kt ni qua mng Internet: Cc ng dng kt ni thng qua my ch
Internet, dch v IIS thc hin ng dng trn Internet (ASP, JSP,
ASP.net,)

M hnh Desktop.
Nu xt trn mt my Desktop s kt ni trao i d liu c th hin nh sau:

Trn mt Desktop c th c nhiu ng dng, mi ng dng c th thc hin thao


tc vi nhiu CSDL.

M hnh Client/Server.
Nu xt theo m hnh client/server, ng dng trao i vi SQL Server theo
s sau:

7
Nh s trn nhn thy SQL Server cho php cc ng dng kt ni theo
cc phng thc sau: OLE DB, ODBC, DB-Library, Embedded SQL, y l cc
phng thc kt ni h ch cho nhng nh pht trin ng dng.

8
Nu xem xt c th hn ta c th xem s sau:

Trong s trn cho thy, SQL Server c th thc hin trao i d liu vi
cc ng dngt heo nhiu giao thc truyn tin khc nhau (TCP/IP, NetBeUI, Names
Pipes,), cc ng dng c th s dng nhiu phng thc kt ni khc nhau (OLE
DB, ODBC, DB-Library).

9
M hnh kt ni ng dng trn mng Internet.
Nu xt ring cc ng dgn kt ni vi SQL Server trn mng Internet, cc
my ch SQL Server s c qun l thng qua cc h thng my ch mng, h
iu hnh mng, cc ng dng (COM+, ASP, IIS) s thng qua my ch mng kt
ni n SQL Server, m hnh ny c th p dng cho cc mng ni b, din rng,
ng dng c khai thc trn trnh duyt Internet Browser. Xem xt m hnh di
y:

10
CC THNH PHN CA SQL SERVER.
SQL Server c cu thnh bi nhiu thnh phn khc nhau, cc thnh phn
c mi quan h trong mt h thng, phi hp vi nhau to thnh mt gii php
hon chnh, nng cao hiu qu qun tr, phn tch, lu tr d liu.

Relational DataBase Engine.


y l mt engine c kh nng cha d liu di nhiu quy m khc nhau,
theo dng bng, h tr nhiu phng thc kt ni ADO, OLE DB, ODBC.

Replication.
L cng c dng nhn bn d liu, bn c th to mt Server khc vi b d
liu ging b d liu trn Server chnh. Cng c to c ch t ng b d liu gia
Server chnh v Server nhn bn. Mc ch ca vic to Server nhn bn l gim ti

11
cho Server chnh, nng cao hiu qu phc v vi s lng ngi, phin giao dch
ln.
Data Transformation Service DTS.
L cng c gip bn chuyn d liu gia cc Server qun tr CSDL khc
nhau, DTS c th chuyn d liu t SQL Server sang Oracle, Access, DB, trc
khi chuyn d liu DTS nh dng kiu d liu chuyn sang h qun tr CSDL
khc.
Analysis service.
L cng c gip khai thc phn tch d liu, hay khai ph d liu theo
phng thc a chiu. T mt tp d liu sn c bn c th khai ph ri t a
ra nhng nhn nh, phn tch, nh gi v d on theo lnh vc no , mi chiu
trong ng cnh ny c coi l mt tiu ch xem xt ca d liu.
English query.
y l cng c tra cu d liu bng ting anh, c php c th s dng theo
vn phm ting anh thng thng.
SQL Server tools.
L b cng c cung cp giao din cho ngi qun tr nh Enterprise
amanger, Query Analyzer ,SQL Server sau khi ci t SQL Server group gm
nhng thnh phn c bn trong group nh sau:

Mt s cng c quan trong: Enterprise manager, Query Analyzer, Profiler,


cc cng c s c gii thiu khai thc sau.

12
CI T SQL SERVER.

Chun b ci t.
Ty theo mi trng ca my tnh ca bn m thc hnh ci t phin bn
no, bng sau l tham s vi SQL Server 2000 phin bn Standard.

Computer Intel hoc tng ng


Pentium 166 MHz hoc cao hn

Memory (RAM) Enterprise Edition: Ti thiu 64 MB, 128 MB hoc nhiu


hn.
Standard Edition: Ti thiu 64 MB.
Personal Edition: Ti thiu 64 MB trn Windows 2000,
ti thiu 32 MB trn cc h iu hnh khc.
Developer Edition: Ti thiu 64 MB.
Desktop Engine: Ti thiu 64 MB trn Windows 2000, ti
thiu 32 MB trn h iu hnh khc.

Hard disk SQL Server database components: T 95 n 270 MB,


thng thng 250 MB.
Analysis Services: Ti thiu 50 MB, thng thng130
MB.
English Query: 80 MB
Desktop Engine: 44 MB

Monitor VGA hoc phn di cao hn.


800x600 hoc phn di cao hn.

13
Thc hnh ci t.
- S dng a CD ROM c b ci t SQL Server 2000 (tu theo yu cu
ca bn l Standard, Personal hay Enterprise,...)
- Chy trnh Autorun.exe (thng t chy khi a a vo my tnh)

Trong mn hnh trn ta c mt s la chn:


SQL Server Components: S thc hnh trong bc tip.
SQL Server 2000 Prerequisites: Dng ci t nhng yu cu c cung cp
sn cho vic ci t nu h thng trong my ci t cha .

14
- Chn SQL Server Components.

- Chn Install Database Server.

15
- Chn Next.

Nu ci t SQL Server trn chnh my bn ang ngi th s dng Local


Computer
Nu ci t dng kt ni vi my khc th s dng Remote Computer sau
nhp tn my hoc chn v tr my bng cch s dng Browse
- Chn next.

16
- Chn tu chn theo ch dn (to mi, thay i ci c, thm cc chc
nng khc,...).
- Trong trng hp chn to mi (la chn th nht) sau n Next.

- Nhp tn ca bn, tn c quan, sau n Next, Yes.

17
Trong ca s hin ln 3 la chn:
1. Ci t cc cng c truy vn: S dng cho cc my khch khng
lu tr d liu nhng c chc nng truy vn d liu n SQL
Server c CSDL
2. Ci t Server v cc cng c truy vn: Ci t SQL Server c d
liu v cc cng c ca my khc truy vn d liu
3. Ci t kt ni: Dng cho cc my ch s dng kt ni n Server,
thng dng ci t cho cc my s dng cc ng dng kt ni n
server
- Chn la chn 2, sau n Next

Dng cc la chn chn kiu ci t:


+ Typical: Ci t nhng chc nng c bn c h thng nh sn
(chc nng thng thng).
+ Minimum: Ci t nhng chc nng ti thiu ca h thng.
+ Custom: La chn nhng chc nng cn ci t theo yu cu ca
ngi dng.

18
Trong cch la chn Custom ta cn thm bc chn cc chc nng nh sau:

- n nt Next tip tc.

19
Trong ca s trn ta cn nhp tn, mt khu ca user c ng k truy nhp
vng, thng thng SQL Server ci t c thc hin theo quyn Administrator
ca my tnh ch, khi bn la chn nt chn Use a Domain User account.
- n nt next tip tc.

Trong ca s trn cho php ta s dng 2 la chn:


+ La chn th nht: Ngi dng s dng h thng bo mt ca
Windows (h iu hnh ca my ch ci t thng thng khi ci t dng la
chn ny).
+ La chn th hai: Ngi dng s dng h thng bo mt ca
Windows v ca h qun tr CSDL SQL Server.
Trong cc trng hp trn u c th s dng tn v mt khu c cung
cp theo vng (domain) ca h iu hnh. Nu s dng la chn th 2 ta s dng
tn v mt khu ca ngi qun tr vng (Administrator).
i vi SQL Server ta c th thay tn Administrator bng tn sa (vit tt ca
t System Administrator).
Vn thc hin chn ch bo mt no s c bn trong nhng bi sau.

20
- n next tip tc.

Trong ca s trn ta c 2 la chn:


+ Per Seat for: La chn cho php xc nh s thit b (khi nim s
c gii thiu sau) trn mi v tr khai thc h thng theo bn quyn c php
ca Microsoft.
+ Processor License for: Xc nh s Processor cho php s dng theo
bn quyn c cung cp bi Microsoft.
Ngoi vic ng k bn quyn ti thi im ny, ta c th ng k bn quyn
trong cng c iu khin ca Control Panel.

21
QUN TR SERVER

INSTANCE
SQL Server h tr nhiu hot ng trn mng, nh cc m hnh xem xt
trc ta c th thit lp nhiu my tnh ci t SQL Server, cc my tnh c th lin
kt vi nhau, trao i d liu vi nhau.
Tuy nhin mt my tnh cng c th thit lp nhiu h thng SQL Server
khc nhau, mi h thng u c mt tn quy nh, mi h thng nh vy gi l mt
Instance.
Mi Instance trn mt my tnh c coi nh mt h thng SQL Server c
lp, tng t nh cc h thng SQL Server ci t trn cc my tnh khc nhau.

IU KHIN CC DCH V CA SQL SERVER.


SQL Server sau khi ci t xong, khi ng my thng thng s c thit
lp c biu tng gc di, tri mn hnh nh sau:

22
Biu tng my ch c vi my tnh ci t phin bn SQL Server v l biu
tng ca trnh qun l dch v Service Manager.

Gm cc dch v c bn sau:
+ Distributed Transaction Coordinator - DTC.
+ Microsoft Search.
+ SQL Server.
+ SQL Server Agent.
Cc dch v ny ta c th bt u, tm dng hoc kt thc, mi dch v u
iu khin cc ng dng, cng c qun tr ca SQL Server.
thc hin iu khin dch v u tin ta lm nh sau:
Services -> Start/Continue (Pause, Stop)
dch v khi ng t ng khi khi ng h iu hnh hy chn vo nt chn
Auto-start service when OS starts.

23
Dch v MS SQLServer.
Dng qun l tt c cc file gm cc CSDL m SQL Server qun l, l thnh
phn x l tt c cc lnh ca Transact-SQL c gi t cc trnh ng dng client,
phn phi cc ngun ti nguyn khi c nhiu user cng truy nhp mt lc. y l
dch v qun tr c bn, khi ngt dch v ny h thng s ngng tt c cc cng vic
khai thc d liu.

Dch v SQLServerAgent.
H tr cc tnh nng cho php lp thi biu cc hot dng theo tng giai on
tren SQL Server, hoc thng bo cho ngi qun l h thng v nhng s c ca
h thng, bao gm cc thnh phn Jobs, Alerts, Operator.

Dch v Microsoft Search.


Cung cp dch v tm kim v tm kim vn bn vi cc php ton c bn sau:
+ K t (chui): =, >, >=, <, <= c so snh vi mt chui hng.
+ So snh chui nh trong vn bn hoc chui c kch thc ln, vn bn.

24
Dch v MS DTC.
L dch v cho php trong mt phin giao vn c th s dng d liu c phn
phi trn nhiu server khc nhau, thc hin theo cc bc c bn sau:
+ Gi cc th tc lu tr trn cc server xa s dng SQL Server
+ T ng gi hoc to cc phin giao vn cc b v cc giao vn vi cc
my ch t xa
+ To b d liu c cp nht hoc c phn phi bi cc server xa.
Xem xt s hot ng sau:

25
Nh s trn khi client triu gi mt th tc c sn n server cc b, khi
c yu cu d liu trn server khc, thng qua dch v MS DTC server cc b s
triu gi cc th tc t server t xa, kt qu c th to c b d liu c tp
trung t nhiu server khc nhau.

QUN TR SERVER.
Nh nu trn mi Instance c coi l mt h thng qun tr CSDL SQL
Server v c th gi tt l Server. Server c chc nng qun tr ton b h thng
ca SQL Server (d liu, bo mt, ngi dng, tc v, cc dch v khc,...).
Cc ng dng hoc cc cng c khai thc d liu (GUI) s thc hin khai
thc d liu do Server qun l khi c kt ni n Server. Tuy nhin mt vn
quan trng l Server phi sn sng phc v.

26
Thc hin qun tr Server l vic thc hin cc cng vic sau:
+ Bt/tt/tm dng dch v ca SQL Server.

+ G b hoc ci t Server (Instance).

+ Thay i, nng cp phin bn.

THIT LP KT NI N SERVER.
khai thc c d liu ca h thng SQL Server ta phi thc hin kt ni
(connect) n Server, vic kt ni c th thc hin t cc v tr: ng dng, cng c
khai thc ca SQL Server l SQL Client. Trong phn ny ta s xem xt vic kt ni
t SQL Client n Server.

27
Mi Server khi ci t c mt tn l tn ca Instance c t. Trn mt
mng my tnh nu c quyn hn ta hon ton c th thc hin kt ni n
Server ni trn.
T mt my SQL Client c th thc hin ng thi kt ni n nhiu Server
khc nhau, y cng chnh l u im ca SQL Server.
Nu bn ci t phin bn SQL Server trn my tnh bn cng phi lm tian
b cc bc kt ni nh SQL Client, phin bn SQL Server c coi nh gm 2
phn: H thng qun tr, cng c khai thc SQL Client.
D s dng cng c no khai thc c ci t trn my tnh ca bn,
quyn hn khai thc, qun tr ph thuc vo user thc hin kt ni.

Qun tr Server Group.


Server Group l cng c dng qun l cc kt ni (s thc hnh sau) tng
t nh khi nim th mc trong h iu hnh, trong cc Server Group cha cc
Server Group con hoc cc kt ni n Server.
Cc bc thc hin nh sau:
- Vo chc nng Enterprise manager nh hnh di

28
- Di chuyn vo mc trong bng cch nhn vo du + ca cy cc i tng.

- Chn New SQL Server group to group mi

- Nhp tn group -> Ok

29
Cc thao tc i tn, xa c thc hin bng cch nhn phi chut vo group cn
thao tc.

30
Thit lp kt ni n Server (thit lp Server).
L bc thit lp kt ni n Server t Client, Server khc. Cc kt ni c
th hin bng tn ca Server kt ni n (hay cn l tn ca Instance), chnh v vy
nn tn cc kt ni trn mt Client l duy nht, khng trng nhau trong ton b
client.
Trc khi thc hin to kt ni ta phi chun b cc tham s sau:
+ Tn Server (Instance) mun kt ni n
+ User name v Password ca Server ta cn kt ni n (tham s ny
do ngi qun tr Server cp).
Cch lm nh sau:
- Vo Enterprise v chn Server group

- Nhn nt phi chut vo ca s bn phi, chn New SQL Server


Registration.

31
- Nhp tn Server.

- Nhn Add -> Next

32
- Chn ch bo mt (thng thng chn The Windows account
information chn ch bo mt ca Widnows, phn ny s xem xt k trong
bi sau) -> Next -> Chn Server Group.

- Nhn Finish.

33
Khi mn hnh xut hin thng bo Registered successfully l vic thit lp
thnh cng.
- Nhn Close.
Sau khi thit lp xong kt ni xut hin trn danh sch cc kt ni.

34
Kt ni nh thit lp c quyn hn khai thc ph thuc vo user kt ni,
trong v d trn quyn hn ph thuc vo user truy nhp vo Windows, tuy
nhin trong nhng bi sau s gii thiu cch thac to user, s dng user ca SQL
Server thc hin to kt ni v khai thc.
xa hoc sa thng tin cho kt ni chn Delete hoc Edit khi nhn nt
phi chut vo tn kt ni cn thao tc.

Xem v thay i tham s cho Server.


thay i tham s cho Server, hy chn tn kt ni -> nhn nt phi chut
-> chn Properties.

35
Tuy nhin cc tham s trn c th bn cha xem xt, nn trong bi ny ch
gii thiu m s xem xt mt s tham s c bn trong nh bi lin quan.

Bt/tt/tm dng/kt ni/ngt kt ni Server.


Ta c th thc hin tm iu khin dch v MS SQL Server t kt ni.
- Chn tn kt n
- Nhn nt phi chut

36
CU HNH KT NI MNG CA SERVER.
cc Client hoc cc ng dng kt ni c n Server, ta phi cu hnh
cc phng thc kt ni ph hp vi kt ni mng. Kt ni mng c th s dng
kt ni thng qua Proxy, thng qua mng Internet.
Khi s dng kt ni no i na th trc ht ta phi chn giao thc ph hp
vi giao thc mng ng s dng. Thc hin bng cch chn Server network utility

- Chn giao thc a vo danh sch enabled s dng v a v danh sch


Disabled khng s dng.
- Chn Properties chn cng, tham s ca giao thc.
- Chn Enable WinSock proxy thc hin kt ni qua Proxy.
- Chn Force protocol encryption s dng kt ni qua Internet khng
dng Fire Wall vi SQL Server.

37
QUN TR CC CLIENT.
Khi Server sn sng cho kt ni, vic tip theo l xem xt n cc client
kt ni n server. Trong phn ny ta s xem xt cu hnh client kt ni n server.
Cc client kt ni n server u thc hin trn c s h thng truyn tin ca
mng my tnh, tuy nhin cc ng dng client kt ni n server thc hin khai
thc d liu trn server thng qua mt s phng thc kt ni sau:
- OLE DB: C 2 kiu Microsoft OLE DB Provider for SQL Server v
Microsoft OLE DB Provider for ODBC.
- ODBC: Kt ni thng qua SQL Server Enterprise Manager v SQL Query
Analyzer s dng SQL Server ODBC.
- DB-Library: S dng lnh SQL Server isql.

Cu hnh Net-Library.
Nh xem xt trc mi Instance khi cu hnh xc nh mt a ch v s
hiu cng ring, nn vic kt ni thng qua Net-Library l kt ni thng qua a ch
v nh vy kt ni xcnh c n Instance.
Trn Server thng thng c cu hnh theo TCP/IP Sockets v Named
Pipes Net-Libraries, trn client thng thng cu hnh theo Thc hin cu hnh ta
s dng Client network utility.

- Chn Client network utility.

38
- Chn giao thc v cc tham s lin quan tng ng vi server, c th thc
hin nh tn Server sang tn mi trn bng Alias.

Cu hnh ODBC.
ODBC vit tt ca t Open DataBase Connectivity, l cng c kt ni m.
ODBC c Windows cng cp dn khi ci t, c s dng lm kt ni trung
gian gia ng dng v cc h qun tr CSDL (Dbase, Access, SQL Server,
Oracle,).
Thng qua ODBC ng dng ch cn xc nh tn ca ngun trong ODBC
(gi l Data Source) v ti khon khi truy nhp thc hin quyn m khng cn
quan tm n c s d liu ang nm u.
Thng thng khi ci t h qun r CSDL mi th Windows s t cp nht
vo danh sch cc Driver iu khin ODBC ca h qun tr CSDL . Thc hin
to ODBC cho SQL Server nh sau:
- Chn ODBC trong Administrative tools (Control panel).

39
- Chn bng Drivers, trong danh sch kim tra xem c SQL Server cha

Nu cha c kim tra cch ci t SQL Server (thng thng Windows t


cp nht).
- Chn bng User DSN (Data Source Name) -> Add.

40
- Nhn Finish.

- Nhp tn DSN (y l tn s c s dng cho ng dng), thng tin m t,


tn Server (Instance).
- Nhn Next.

41
Trong ca s c 2 la chn: S dng ch bo mt k tha ca Windows
NT hoc ca SQL Server (s xem xt sau), trc ht bn hy chn la chn k tha
ca Windows NT (lc ny quyn khai thc l quyn ca ngi truy nhp vo
Windows).
- Nhn Next, chn hp chn Change the default database to -> chn c s d
liu (vic to c s d liu s xem xt bi sau, ti bc ny bn hy chn mt c s
d liu v d c tn l Pubs, y l c s d liu v d do SQL Server t thit lp
lm mu).

- Nhn Next -> Finish.

42
kim tra kt ni c thnh cng khng bn nhn Test Data Source sau o
nhn Ok kt thc v thu c mn hnh sau:

Trn danh sch cc Data Source c tn DONGDO va c to, Data Source to ra


s c s dng trong ng dng client.

43
Cu hnh OLE DB.
OLE DB l phng thc kh quen thuc i vi ngi lp tnh CSDL (lp
trnh trn Desktop hoc trn Internet). OLE DB s dng vi nhiu h qun tr
CSDL khc nhau, mi h qun tr c c php ring v ch nh driver iu khin
cho n. Vi SQL Server thng thng s dng 2 phng thc kt ni s dng OLE
DB:
- Microsoft OLE DB Provider for SQL Server (SQLOLEDB): Khng s
dng ODBC, xc nh driver cho SQL Server.
- Microsoft OLE DB Provider for ODBC: S dng ODBC to (trong phn
trc).

44
QUN TR C S D LIU

Trong chng ny ta s xem xt cu trc vt l, to, xa, sa tham s ca c


s d liu.

CU TRC C S D LIU.
Chc hn khi nghin cu n h qun tr CSDL SQL Server bn xem xt
n cc h qun tr CSDL nh DBase hoc Access, vi h qun tr CSDL nh trn
mi c s d liu khi s dng (thc hin m CSDL) s m trc tip t tp tin cha
CSDL, tp tin cha CSDL s c mt tp tin chnh (v d *.dbf hoc *.mdb) v tp
tin ph nhng khi ta thao tc ta ch cn quan tm n tp tin chnh. Nn trong cc
ng dng thng thng ta thng dng cc thao tc m (open) m tp tin chnh
cha CSDL v ng (close) ng tp tin chnh cha CSDL m khng cn quan tm
n vic kt ni n CSDL cha (khng c phng thc kt ni).
SQL Server qun l trc tip cc CSDL, danh sch mi Server s gm danh
sch cc tn CSDL, tn cc CSDL l duy nht, khng trng nhau. Mi CSDL SQL
Server s qun l cc cu trc vt l ca n. Chnh t cch thc qun l nh trn
m vic qun tr c s d liu c mt s c im sau:
+ Client khai thc CSDL trc ht phi thc hin kt ni n Server qun
tr CSDL .
+ Ch thc hin khai thc vi cc CSDL c tn trong danh sch cc CSDL
m Server qun l.
+ Khng c cc phng thc m CSDL trc tip t tp tin nh Dbase hoc
Access.
+ Khi kt ni n Server, Client ch thc hin c quyn khai thc theo
quy nh nh sn trong CSDL (phn quyn trong CSDL).

Cu trc c s d liu.
C s d liu trong SQL Server lu tr theo 2 phn: phn d liu (gm mt
tp tin bt buc *.mdf v cc tp tin ph *.ndf) v phn nht k (*.ldf). Nh vy
mt c s d liu c t nht 2 tp tin.
Cu trc logic trong CSDL gm cc table, view v cc object khc. Sau y l cu
trc mt CSDL.

45
S qun tr c s d liu ca SQL Server.
C s d liu trong SQL Server chia thnh 2 loi: C s d liu h thng (do
SQL Server sinh ra khi ci t) v c s d liu ngi dng (do ngi dng to ta).

C s d liu h thng gm:


- Master: Lu tr cc thng tin login account, cu hnh h thng, thng tin
qun tr cc CSDL, l CSDL quan trng nn thng c sao lu bo
m an ton cho h thng.
- Tempdb: Cha cc table tm thi v cc th tc c lu tr tm thi.
Cc table v th tc ni trn c lu tr trong CSDL ny phc v cho
cc user.

46
- Model: c s dng khi template c s dng cho cc CSDL c to
trn mt h thng.
- Msdb: S dng bi SQL Agent.
Tp tin ca cc CSDL ni trn nh sau:

Tp tin CSDL Tn tp tin vt l Kch thc ngm nh


master primary data Master.mdf 11.0 MB
master log Mastlog.ldf 1.25 MB
tempdb primary data Tempdb.mdf 8.0 MB
tempdb log Templog.ldf 0.5 MB
model primary data Model.mdf 0.75 MB
model log Modellog.ldf 0.75 MB
msdb primary data Msdbdata.mdf 12.0 MB
msdb log Msdblog.ldf 2.25 MB

Cu trc vt l ca CSDL.
Nh cc cu trc cc CSDL h qun tr CSDL thng thng (Dbase,
Access), SQL Server cng qun l tp tin d liu ca CSDL dng vt l theo
trang (page) v phn on (extent).
Page.
SQL Server qun l mt page c kch thc l 8KB, nh vy 1MB c 128
page, trong mi trang c 96 byte cha thng tin ca trang. C 8 kiu page nh sau:
Tn Ni dung
Data Cha tt c cc kiu d liu loi tr text, ntext v
image
Index Cc kha Index.
Text/Image Text, ntext, and image data.
Global Allocation Map, Cha cc thng tin nh v ca cc extent.
Secondary Global
Allocation Map
Page Free Space Cha thng tin khong trng ca page.
Index Allocation Map Cha cc thng tin v Extent s dng cho Index
v Page.
Bulk Changed Map Cha thng thng tin v cc lnh BACKUP LOG.
Differential Changed Cha cc thng tin lnh BACKUP DATABASE.
Map

47
i vi cc tp tin nht k (*.ldf), cc bn ghi c ghi li lin tc, khng
phn trang.

D liu trong mt trang s bt u lu tr t sau phn thng tin Header, v


lu tr lin tip, mi hng c kch thc ti a l 8060byte. Ring i vi d liu
kiu text, ntext, image y l kiu d liu phc tp v c kch thc ln, SQL
Server s c chin lc qun l khc, phn tran ring nhm tng hiu qu truy vn
d liu.
D liu trong SQL Server c lu tr trn a v to ch mc Index theo
cu trc d liu kiu B-Tree Plus (c th tham kho thm trong nhng ni dung cu
trc d liu nng cao).
Extent.
Extent l n v dng cha cc table v index, mi extent c 8 page hay
64KB. SQL Server c 2 kiu extent:
- Uniform: Ch dng lu tr cho mt i tng,.
- Mixform: C th dng lu tr 8 i tng.
Cu trc Extent nh sau:

48
File.
Tp tin lu tr mt CSDL trong SQL Server c 3 loi.
Primary data file: L file chnh lu tr d liu (*.mdf = Master Data File), mi
CSDL c mt file primary, lu tr im bt u ca mt CSDL v cc im kt ni
n cc file lu tr tip theo (sencondary).
Secondary data file: L tp tin lu tr d liu sau Primary data file, mt CSDL c
th c nhiu tp tin sencondary. Loi tp tin ny cho php mt CSDL c th phn
tn d liu nhiu ni trn my tnh hoc trn mng.
Log file: L loi tp tin lu tr thng tin nht k ca CSDL.
Gi s to mt CSDL c tn MyDB, thng thng h thng ngm nh cc
tp tin nh sau:

49
Cc tp tin lu tr d liu phn thnh tng trang, cc trang nh s id lin tip theo
tng file:

File group.
SQL Server s dng cng c file group gip ngi dng d dng qun l
file, cc file lu tr d liu ca mt CSDL c th nhm thnh tng nhm, gm 2
kiu nhm chnh:
- Primary: L nhm bt buc c, dng xc nh cho file primary (*.mdf) v
nhng file khc.
- User-defined: Nhm do ngi dng to ta, t t tn d qun l.

QUN L C S D LIU.
To c s d liu.
Theo l thuyt c s d liu, trc khi to CSDL ta phi thc hin phn tch
cc thng tin lin quan mc ch s dng CSDL cho i ton ca mnh: Tn CSDL,
cc table, rng buc, tun theo cc chun CSDL (phn ny s bn k trong bi
sau)
Trong cc thao tc vi CSDL v i tng khc s gm 2 phn: Phn thao
tc theo cng c wizard v cu lnh T-SQL.

50
To theo cng c:
- Vo Enterprise Manager -> Databases.

- Nhn nt phi chut/hoc menu Action -> New Database

- Nhp tn CSDL.

51
- Xc nh tn logic, tn vt l, tn nhm ca tp tin v cc tham s khc.

- Xc nh tn logic, vt l, tham s khc tp tin nht k.

52
To theo cu lnh.
S dng cu lnh Create Database to CSDL, cng c thc hin lnh:
- Trong Enterprise Manager -> Databases -> Tools -> SQL Query Analyzer

- Chn CSDL Master.

53
- Son lnh trong ca s lnh:
USE master
GO
CREATE DATABASE QLTV
ON
( NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql
server\mssql\data\qltv_dat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
FILENAME = 'c:\program files\microsoft sql
server\mssql\data\qltv_log.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO

- Nhn F5 hoc nt thc hin.

Cng c SQL Query Analyzer cho php bn thc hin tng cu lnh bng
cch bi en vo on lnh cn thc hin sau nhn F5 hoc nt thc hin.
Khi to CSDL mi th n phi ng v tr CSDL Master, khi mun thc
hin lnh vi mt CSDL c th c no bn phi chn vo CSDL v thc
hin lnh.

54
Trong on lnh trn lnh User Master thc hin chn CSDL Master bng
cu lnh; lnh Use xc nh CSDL thc hin.
Lnh Go xc nh cu lnh kt thc v bt u cu lnh khc, cu lnh c
hiu l dng lnh. Trong lnh T-SQL mt s lnh khc nhau vn c th nm trn
mt dng lnh nn trong mt s tnh hung kich bn cu lnh khng cn s dng
lnh Go.
Xa c s d liu.
Xa theo cng c.
- Chn vo CSDL.
- Nhn nt phi chut -> Delete.

- Chn Yes.
Xa theo cu lnh.
- S dng lnh Drop Database
Drop Database QLTV

Sa tham s.
Sa theo cng c.
- Chn CSDL.
- Nhn nt phi chut

55
- Chn Properties.

- Thay i tham s khi cn thit:


+ Restrict access: Ngn truy nhp.
+ Read only: t thuc tnh ch c.
Sa theo cu lnh.
- S dng cu lnh Alter Database, v d sau thc hin thm tp tin
secondary vo CSDL.

ALTER DATABASE QLTV


ADD FILE
(
NAME = QLTV_newfile,
FILENAME = 'c:\Program Files\Microsoft SQL
Server\MSSQL\Data\newf.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO

56
- Sa tham s da vo th tc h thng sp_dboption:
+ Sa i thuc tnh read only:
USE master
EXEC sp_dboption 'qltv', 'read only', 'TRUE'

+ Sa thuc tnh autoshring


:
USE master
EXEC sp_dboption 'qltv', autoshring, TRUE

+ Sa thuc tnh single user:

USE master
EXEC sp_dboption 'qltv', single_user

Mi cu lnh lin quan bn c th tra cu, tham kho trong Book Onlines.

57
BNG D LIU TABLE

CC CHUN TC.
Trong thit k c s d liu, vic tun th ngt ngo nhng chun l vic ht
sc quan trng, n gip cho vic qun tr d liu c hiu qu, khc phc d tha,
thun li trong qun tr d liu ln, hiu qu vi d liu phc tp.
Gm 3 chun c bn:
Chun th nht.
Chun th nht xc nh cu trc ca mt bng khng th cha cc trng
lp li.
Ta c th ly v d nh sau gi s mun lu tr thng tin mt quyn sch,
mi quyn sch c th c mt hoc nhiu tc gi tham gia bin son, nu khng
tun theo chun th nht nh nu trn th trong mt bng d liu sch c th c
nhiu trng d liu xc nh thng tin tc gi.

ID Tn sch NXB Tc gi 1 Tc gi 2

Trong v d trn bn nhn thy thng tin Tc gi c lp li 2 ln, kh phc


bng cch to ra mt bng lu tr danh sch tc gi ca sch (s bn trong chun
sau).
Chun th hai.
Chun th hai xc nh trong cc hng d liu, mi ct u ph thuc vo
ct kha chnh. Ta xem xt mt trng hp vi phm chun th hai nh sau:
Gi s xt tnh hung sinh vin mn sch trong mt th vin, vic mn
sch c nht k theo bng nh sau:

Id_sach Id_Sinhvien Ngy mn Sc khe sinh vin

Xem xt trong bng trn ta thy mi hng ph thuc vo kha id_sach v


id_sinhvien, nhng thng tin Sc khe sinh vin khng ph thuc vo id_sach, nn
thng tin ny cn chuyn sang bng v thng tin ca sinh vin.

58
Chun th ba.
Chun th ba xc nh bn ghi tun th theo chun th hai v khng c bt
k phn ph thuc chuyn tip no. Phn ph thuc chuyn tip tn ti khi mt
bng cha mt ct c trng. Ct ny khng phi l kha nhng vn xc nh cc
ct khc.
Ta xem xt mt v d vi phm chun nh sau:
Gi s trong th vin c mt bng lit k sch tn trong kho, khi sinh vin
mn sch s lng sch m sinh vin mn s tng, nu nht k mn sch c
thc hin theo bng sau:

Id_sach Id_Sinhvien Ngy mn S lng mn

Bng trn bn thy mi ln sinh vin mn sch s lng sch c m


id_sach m sinh vin c m id_sinhvien s tng ln v tng s l S lng
mn, thng tin ny l thng tin tch ly theo id_sach, id_sinhvien, ngy mn.
Theo bng trn ta thy khng vi phm chun th hai nhng vi phm chun
th ba v ct S sch mn l ct ph thuc chuyn tip, ct ny cn phi c
chuyn sang bng khc l bng Sinh vin mn sch:

Id_sach Id_Sinhvien S lng mn

Khi no cn chun tc.


Mt c s d liu cn c chun tc khi:
- D liu ln, phn tn.
- Khng xc nh r nhm d liu.
- D liu phc tp.
- Bc u tin khi xy dng ng dng.
Khi no khng cn chun tc ha.
Mt s tnh hung s khng cn chun tc ha, nu theo nh thit k theo
chun th vic a ra mt mu tin truy vn c th phi thc hin truy xut t nhiu
bng vi nhau, iu ny c ngha ta phi thc hin kt hp cc bng vi nhau (tuy
theo lut) nn thi gian truy xut c th rt ln m yu cu thc t t ra trong tnh

59
hung ny l phi nhanh, th truy xut theo mt bng c sn l nhanh hn, sau
y l mt s trng hp khng cn chun tc ha (ty theo tnh hung):
- Thng tin tnh ton.
- Thng tin s kin.
- S phn hoch.

THIT K BNG D LIU.


Table (bng d liu) l mt thnh phn c bn ca CSDL, mt CSDL c
thit k t mt hoc nhiu bng d liu, mi bng d liu c cu trc t cc hng
v ct d liu, mi hng dng m t mt i tng, vn , s kin,... ct th hin
thuc tnh ca cc i tng, s kin,... ca hng. D liu cng ct c cng kiu
(data type). Ngoi cc hng, ct bng cn c cc kha, lin kt, rng buc,...
Trc khi bt tay vo thit lp bng d liu trc ht ta phi xc nh xem
bng s xy dng nh th no, da trn mt s thng tin sau:
- Kiu d liu trong bng.
- Cc ct, kiu d liu tng ng (v di nu cn thit).
- Ct no cho php gi tr NULL (l gi tr m phn d liu thuc hng, ct
xc nh khng c gn gi tr no, v vy nn 2 phn t c cng gi tr NULL l
khng bng nhau).
- Gi tr ngm nh (l gi tr m khi cha nhp vo n nhn gi tr ny).
- Ch s Index, kha chnh, kha ngoi.
Kiu d liu.
SQL Server gm nhng kiu d liu sau:
Binary: L kiu d liu cha dng s h hexa, gm 3 kiu d liu Binary,
Varbinary, Image.
Text: L kiu k t, cha ch ci, k hiu, s, gm nhng kiu d liu sau:
- Char: Kiu k t, khi xc nh di th di trong CSDL s xc nh
theo di t trc m khng theo di d liu thc c, khng s dng vi k
t dng Unicode, di ti a l 8000.
- Nchar: Tng t nh Char nhng s dng vi k t Unicode, di ti a
4000.

60
- Nvarchar: Tng t nh NChar nhng kch thc trong CSDL s l kch
thc thc d liu hin c, khng tnh theo kch thc t trc, kch thc ti a
l 4000.
- Varchar: Tng t nh Nvarchar nhng khng h tr Unicode.
- Text: Kiu vn bn, cha c k t xung dng, lu tr theo dng vn bn,
c kch thc ln, c th ln n vi Gb, c ch qun l kiu d liu theo dng con
tr v cch thc chn v cp nht s khc, kiu d liu ny khng h tr cho
Unicode.
- Ntext: Tng t nh Text nhng c h tr Unicode.
Data/Time: Kiu d liu ngy, thi gian, ngy v thi gian, gm 2 kiu:
- DateTime: y c ngy v thi gian.
- SmallDataTime: Ch ngy hoc thi gian.
Numeric: D liu kiu s, gm cc kiu d liu sau:
- Int, smallint, tinyint, bigint: S nguyn
- Float, real, decimal, numeric: S thc.
Monetary: Tin t:
- Money, Smallmoney.
Bit: Kiu s 0, 1.
Sql_variant: L kiu d liu xc nh theo kiu d liu khc, mt ct d liu c
nh ngha d liu kiu ny c th lu tr nhiu d liu c kiu khc nhau trong
cng mt bng. V d c th lu tr nhiu kiu d liu int, binary, char, nhng
khng cha d liu kiu text, ntext, image, timestamp, sql_variant.
Timestamp: L kiu d liu c kch thc 8 byte, lu tr dng s nh phn do h
thng t sinh ra, mi gi tr timestamp trong CSDL l duy nht.
Table: L kiu d liu c bit lu tr tp hp cc hng (dng bng), mc ch s
dng chnh l lu tr tm thi tp hp cc hng sau truy vn.

Text in row.
Nh xem xt trc, d liu kiu char, varchar c di ti a l 8000byte,
d liu kiu text, ntext c 2 kiu lu tr: lu tr trc tip, lu tr qun l theo kiu
con tr.

61
- i vi lu tr theo kiu trc tip, kch thc ti a i vi text l 8000,
i vi ntext l 4000 (kch thc 1 k t m Unicode l 2 byte, m khng
Unicode l 1 byte).
- Lu tr, qun l theo con tr kch thc ln n GB.
lu tr d liu theo kiu con tr u tin ta phi t chc nng Text in
row v trng thi On, thuc tnh ny hiu ng c vi kiu d liu image.
S dng th tc sp_tableoption thay i thuc tnh, thuc tnh thay i
theo bng d liu.
Gi s bt chc nng text in row nh sau:
Sp_tableoption N'TacGia', 'text in row', 'ON'
Tt chc nng text in row nh sau:
Sp_tableoption N'TacGia', 'text in row', 'OFF'
cp nht d liu khi thuc tnh c bt, ta phi dng lnh READTEXT,
UPDATETEXT, WRITETEXT (s bn k cu lnh ny sau).

Auto number.
t ct d liu kiu s, tng t ng khi mt hng c thm, ct kiu ny
khng sa d liu. D liu kiu ny tng ng vi vic khi thm hng d liu chn
thm gi tr dng s theo hm NewID().

Rng buc d liu.


c mt CSDL khi lu tr d liu c tin cy, chnh xc cao, nhanh
v thun tin trong khai thc d liu th ton vn d liu l vn ht sc quan
trng. Khi rng buc c thit lp, d liu khi nhp vo CSDL s c kim sot,
tin cy thng tin s c bo m.
C nhiu kiu rng buc d liu, mt CSDL c th gm mt hoc nhiu rng
buc, rng buc c th trn mt bng, trn nhiu bng.
Ton vn d liu chia thnh 4 loi:
- Ton vn thc th (Entry integrity): Mi thc th u c xc nh theo
mt kha, khi bit kha ta hon ton c th xc nh c thc th tng
ng. Kha nh vy coi l kha chnh.

62
- Ton vn theo min (Domain integrity): L loi ton vn c hiu ng vi
cc ct d liu trong mt phm vi no , v d kiu d liu cng l mt
dng ca ton vn min, rng buc theo kha check cng l ton vn theo
min.
- Ton vn dng tham chiu (Referential integrity): Khi mt bng c quan
h vi mt bng khc theo mt mi quan h, trong mi quan h s c
mt kha chnh (nh phn ton vn thc th) v mt kha ngoi, kha
ngoi s l kha tham chiu ca kha chnh, gi tr ca kha ngoi s
thuc tp cc gi tr ca kha chnh hoc gi tr NULL. Rng buc kiu
quan h (Relationship) gi l ton vn kiu tham chiu.
- Ton vn do ngi dng nh ngha (User-defined integrity): L ton vn
do ngi dng nh ngha, quy nh d liu nhp vo theo quy cch, gi
tr c kim sot cht ch, ton vn kiu ny cng c th xy dng trn
c s cc ton vn trc.

Reference integrity
Entry integrity

Data integrity

User-defined
Domain integrity
integrity

63
Bn loi ton vn ni trn ta c th thng k tng ng vi cc kha, quy tc, rng
buc trong SQL Server nh sau:
Kiu ton vn Cng c trong SQL Server
Entry integrity 1. Rng buc Primary key
2. Rng buc Unique
3. Ct Identity
Domain integrity 1. Gi tr ngm nh Default
2. Rng buc kha ngoi Foreign Key
3. Rng buc Check
4. Thuc tnh NOT NULL
Referential integrity 1. Rng buc Forelgn Key
2. Rng buc Check
User-defined integrity 1. Rules
2. Stored procedures
3. Triggers
Cc kha.
Kha chnh Primary Key.
L mt hoc t hp nhiu ct d liu xc nh duy nht trong mt bng, gi
tr kha chnh lun khc NULL.
V d: Bng danh sch tc gi vit sch.
Trong v d trn bng d liu c kha chnh l mt ct d liu id, khi ct xc
nh l kha chnh bn cnh xut hin biu tng cha kha, thuc tnh Allow Nulls
khng c anh du.

64
V d: Bng d liu lu tr thng tin nht k mn sch.

Trong v d trn bng d liu c kha chnh c t hp t 3 ct d liu


id_sach, id_sinhvien, ngay_muon, ba ct trn xc nh duy nht mt sinh vin c
mn mt loi sch trong mt ngy (gi s quy ch xc nh nh vy), cc ct
tham gia kha chnh gi l candidate key.
Kha ngoi.
Theo chun thit k CSDL, khi lu tr thng tin sch phi c mt ct cha
thng tin nh xut bn. Mt nh xut bn c th xut bn nhiu quyn sch v mt
quyn sch ch xut bn mt nh xut bn. Nn trong thit k ta phi c:
+ Bng d liu lu tr danh sch cc nh xut bn: C kha chnh i din
cho nh xut bn.
+ Bng d liu lu tr sch: C cha thng tin nh xut bn.
+ Quan h gia nh xut bn v sch: M kha nh xut bn thuc bng nh
xut bn v thng tin nh xut bn thuc bng sch, ct thng tin nh xut bn
thuc bng sch tham gia quan h trn gi l kha ngoi (Foreign key).
Ct d liu l kha ngoi c th c quan h vi nhiu kha chnh nhiu
bng, mt bng c th c nhiu kha ngoi, kha ngoi c th c gi tr NULL, gi

65
tr ca kha ngoi lun nm trong tp gi tr ca kha chnh trong mi quan h
thit lp.
Kha ngoi v kha chnh phi c cng kiu d liu, cng kch thc.

Rng buc Unique.


Unique l rng buc xc nh trn mt hoc t hp ct d liu, ct hoc t
hp ct d liu c xc nh rng buc loi ny l duy nht.

66
Mt bng d liu c th c nhiu rng buc duy nht, mt ct trongmrang
buc loi ny cho php nhn gi tr NULL, rang buc duy nht c th s dng lm
tham chiu cho kha ngoi.
Rng buc Check.
L rng buc khng ch d liu nm trong mt phm vi no . Rng buc
ny s kim tra d liu khi nhp vo.

67
Gi tr ngm nh Default.
Gi tr gn cho ct d liu khi thm bn ghi v cha nhp d liu vo ct
ny.

68
TO BNG D LIU.
Sau khi xc nh y cc thng tin thit k CSDL, bc tip theo l
thc hin to cu trc CSDL. to cu trc CSDL bc quan trng l to bng
d liu.
Khi to CSDL h thng t ng to ra mt s bng d liu ngm nh, cc
bng d liu ny s cung cp, qun l thng tin qun tr ca CSDL, cung cp mt
s hm h thng tr gip bgi dng.
To bng cng c.
- Chn CSDL
- Chn Tables
- Nhn phi chut ca s bn phi

69
- Chn New Table.

t kha chnh.
xc nh kha chnh ta thc hin chn nhng ct tham gia kha bng
cch gi phm shift v chn chut -> nhn chut phi -> chn Set primary key.

70
Xc nh Identity.
- Chn ct d liu -> Chn yes trong mc Identity -> t seed (gi tr khi
u) -> t increment (bc t ng tng).

To bng bng cu lnh.


Gi s cn to bng tn NXB c cu trc nh sau:

71
S dng lnh Create table, kch bn cu lnh nh sau:
Create table NXB(id int not null primary key
identity(1,1), Ten Nvarchar(100), Ghi_chu Ntext)
Sa cu trc bng.
S dng cng c.
- Chn bng cn sa i ca CSDL.
- Nht phi chut -> chn Design Table.

- Thc hin sa cu trc bng.


Sa dng cu lnh.
sa cu trc bng d liu ta s dng cu lnh Alter table.
- Thm mt ct vo bng c:
ALTER TABLE NXB ADD Dia_chi NVARCHAR(100) NULL
- Xa ct t bng c.
ALTER TABLE NXB_Drop column_Dia_chi

72
Xa bng.
S dng cng c.
- Chn bng
- Nht chut phi
- Chn Delete -> Yes.
S dng lnh. (Drop Table)
Drop Table NXB
Bng d liu c tham gia mi quan h Relationship khi xa bn cn ch : Nu
bng cha kha ngoi th vic xa thc hin bnh thng, nu bng cha kha
chnh ca mi quan h th khng xa c.

Nhp d liu vo bng.


S dng cng c.
- Chn bng d liu
- Nht chut phi -> Open Table -> Return all rows

73
- Nhp d liu theo ng quy cch kiu d liu, rng buc nu c.

Vic sa, xa c thc hin trc tip. i vi cc ct l dng s, tng t


ng khng cn nhp d liu. lu li d liu nhp bn di chuyn con tr sang
hng khc.
S dng cu lnh.
S dng lnh Inert into.
Insert into NXB(Ten, Dia_chi) values(NKim ng, Nh Ni)
Nu ct d liu h tr Unicode th trc gi tr nhp vo bn phi thm km k t
N (nh v d trn).

To, sa rng buc, kha.


Phn ny nhm thc hin thao tc vi cc rang buc, kha: ralationship,
check, unique,...
S dng cng c.
- Chn chc nng Design table.
- Chn biu nt Manage Indexes/Keys...

74
- Chn bng tng ng.

S dng cu lnh.
c th hn ta thc hin theo v d c s cu trc sau:

75
Create Table NXB(id int not null primary key
identity(1,1), Ten Nvarchar(100), Ghi_chu Ntext,
Dia_chi nvarchar(150))

Go

Create Table ChungLoai(id int not null primary key


identity, ten nvarchar(50), ghi_chu nvarchar(200))

Go

Create Table Sach(id int not null primary key identity,


Ten nvarchar(100), so_trang int default(0), Chung_loai
int references Chungloai(id), NXB int references
NXB(id), Tom_tat ntext)

76
KHA INDEX

THIT K KHA INDEX.


Index l mt kha quan trng i vi CSDL c bit l c s d liu ln.
Index c thit lp t mt hoc nhiu ct d liu ca bng d liu. cc gi tr ca
kha Index s c sp xp v lu tr theo mt danh sch (bng khc). Mi gi tr
trong kha Index l duy nht trong danh sch, mi gi tr kha Index s lin kt n
gi tr trong bng d liu (lin kt dng con tr). Vic lu tr d liu ca bng c
kha Index c thc hin theo cu trc cy B-Tree nhm tng tc truy xut d
liu i vi a (thit b th cp).

Khi tm kim mt gi tr trong ct d liu, m ct ny tham gia to kha


Index, u tin cu lnh xc nh v tr ca gi tr nm trong kha Index bng php
duyt cy, sau thc hin tm theo lin kt n bn ghi cha gi tr tng ng vi
kha trong bng.

77
S v d di y gm kha Index c to t ct emp_id ca bng
employees.

Vic thit k kha Index da trn nhu cu truy vn, chn d liu trn mt
bng, xc nh da vo mt s tham s sau:
+ Ct thng c s dng lm kha truy vn d liu (xc nh ct tham gia
kha Index).
+ Tp lnh thng s dng try vn cn tc cao (xc nh tp ct tham gia
truy vn).
+ D liu nhp vo bng c kha Index cn nhanh hn hay truy vn cn
nhanh hn (xc nh t clustered hoc nonclustered).
+ Lng d liu nhp ng lot nhiu hay t (xc nh tham s fillfactor).
Clustered Index.
Khi kha t thuc tnh Clustered, d liu ca bng s c sp xp vt l
trn a, nh vy khi thit k kha dng ny d liu c chn v s tm ng v tr
trn a lu tr (vng a dnh cho bng d liu), chnh v vy m c th xy ra
trng hp phi dch chuyn danh sch cc gi tr c a. Nhng vic to kha
Index dng ny s khng cn sp xp gi tr dng logic m khi truy nhp a
bo m d liu c so xp.
Bng d liu ch c th to ti a mt kha Lustered Index.

78
Nonclustered Index.
D liu Index khng sp xp dng vt l m ch sp xp logic, d liu ca
bng lu tr gi tr kha Index c sp xp, nhanh trong nhp d liu.
Unique Index.
Xc nh d liu ca ct tham gia kha Index khng lp li.
Fill Factor.
Khi to kha Index, d liu tham gi to kha Index s c phn theo mc
ca B-Tree, cc mc c phn theo page d liu, gi tr Fill factor xc nh phn
khong trng ti a ca page theo t l phn trm. Nh khong trng ny m tc
b tr cu trc Index, tc truy lc thng tin trong cy c ci thin.

TO KHA INDEX.
To theo cng c.
- Chn chc nng Design table
- Vo bng Index manager.

- New

79
- Chn cc ct tham gia to kha Index
- t tham s.

To theo cu lnh.
- S dng trong cu lnh Create Table, Alter Table.
- S dng lnh Create Index.

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name


ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )

V d:
CREATE INDEX sach_idx ON sach (id)

80
XA INDEX.
S dng cng c.
- Vo Index amnager
- Chn kha Index -> Delete

S dng cu lnh.
S dng lnh Drop Index.
Drop Index Sach(sach_idx)

81
KHUNG NHN VIEW

KHI NIM KHUNG NHN.


Khung nhn (View) l mt bng tm thi, c cu trc nh mt bng, khung
nhn khng lu tr d liu m n c to ra khi s dng, khung nhn l i tng
thuc CSDL.
Khung nhn c to ra t cu lnh truy vn d liu (lnh Select), truy vn t
mt hoc nhiu bng d liu.
Khung nhn c s dng khai thc d liu nh mt bng d liu, chia s
nhiu ngi dng, an ton trong khai thc, khng nh hng d liu gc.
C th thc hin truy vn d liu trn cu trc ca khung nhn.

TO KHUNG NHN.
S dng cng c.
- Chn chc nng Views ca CSDL.

82
- Nhn phi chut.

- Chn New View.

- Thm cc bng tham gia cu lnh truy vn d liu cho View

83
- Son lnh truy vn hoc nh du cc ct tham gia to View.

- Sa i lnh Select theo mun.


- Ghi kch bn -> t tn view.
To theo cu lnh.
S dng lnh Create View:
CREATE VIEW VIDU as
SELECT dbo.authors.au_lname, dbo.authors.au_fname, dbo.titles.title
FROM dbo.authors INNER JOIN
dbo.titleauthor ON dbo.authors.au_id = dbo.titleauthor.au_id INNER
JOIN
dbo.titles ON dbo.titleauthor.title_id = dbo.titles.title_id

S DNG VIEW.
- Chn View
- Nhn nt phi chut.

84
Thc hin cc chc nng tng t table.

85
TH TC LU TR

KHI NIM TH TC LU TR V HM.


Th tc lu tr c thut ng Stored Procedure, l mt i tng ca CSDL
tng t nh khung nhn, th tc lu tr c th to ra t cng c v cu lnh. TH
tc c thc hin nh cu lnh (c th thc hin t SQL Query analyzer, cc v tr
gi cu lnh T-SQL).
Th tc lu tr c kt cu t mt kch bn cu lnh T-SQL, th tc c
nhng c im c bn sau:
+ Truyn tham s.
+ Gi th tc khc.
+ Tr v cc gi tr tham s, chuyn gi tr tham s cho cc th tc c gi.
+ Tr v gi tr trng thi th tc l thnh cng hay khng thnh cng.

86
Th tc lu tr c nhiu u im so vi thc hin cu lnh T-SQL t cc my
khch:
+ Lp trnh theo module: Th tc c thit lp trong tng CSDL mt ln,
c th gi thc hin nhiu ln trong mt ng dng, c th gi t nhiu ng dng.
+ Thc hin nhanh hn: Khi cn thc hin mt lng ln cu lnh T-SQL,
th tc lu tr thc hin nhanh hn v khi my ch nhn c nhiu cu lnh cng
mt lc u phi kim tra tnh hp l quyn ca ti khon t my khch v cc
tham s khc. Khi th tc cn gi nhiu ln trn cc my khch th th tc thc
hin mt ln u tin, nhng ln sau my khch s chy th tc c bin dch.
+ Lm gim lu lng trn mng: Thay cho v my khch phi gi nhiu
dng lnh t cc ng dng n my ch, khi s dng th tc th n ch cn gi mt
lnh, t dn n lu lng thng tin lnh truyn qua mng gim.
+ An ninh bo mt hn: Khi khng mun cho mt user trc tip khai thc
mt i tng hay bng d liu no , m cn cho user c khai thc th th
tc c th gip bn gn quyn khai thc cho ngi . Vic gn quyn khai thc
nh ni trn s gip cho vn an ninh bo mt trong CSDL tt hn.
PHN LOI TH TC LU TR.
Th tc lu tr c phn thnh 5 loi nh sau:
System Stored Procedure.
L th tc c lu tr tng CSDL Master, th tc loi ny c bt u
bng ch sp_ th tc loi ny thng c s dng trong qun tr CSDL v an ninh
bo mt.
V d: Mun bit tt c cc tin trnh ang thc hin bi user no:
sp_who @loginame='sa'
Kt qu:

87
Local Stored Procedure.
y l loi th tc thng dng nht, nm trong CSDL do ngi dng to ra,
thc hin mt cng vic no . Th tc loi ny thng c to bi DBA
(Database Administrator) hoc ngi lp trnh.
Temporary Stored Procedure.
C chc nng tng t nh Local Stored Prcedure nhng th tc loi ny t
hy khi kt ni to ra n ngt hoc SQL Server ngng hot ng v n c to ra
trn CSDL TempDB.
Extended Stored Procedure.
y l loi th tc s dng chng trnh ngoi vi c bin dch thnh
DLL. Tn th tc c bt u bng xp_. V d th tc xp_sendmail dng gi
mail, th tc xp_cmdshell dng thc hin lnh ca DOS (xp_cmdshell dir c:\).
Remote Stored Procedure:
L loi th tc s dng th tc ca mt server khc.

THIT LP TH TC LU TR.
S dng cng c.
- Chn CSDL cn to th tc trong Enterprise Manager > Stored
Procedures
- Nhn nt phi chut -> New Stored Procedure

88
- t tn th tc, xc nh role ngi khai thc, son kch bn cu lnh.

S dng cu lnh.
S dng lnh Create Procedure, tin xem xt ta xt theo cc v d , cc v
d di y thc hin to th tc v thao tc vi CSDL pubs tin trong d liu
mu, tm hiu c php cu lnh T-SQL bn xem phn cu lnh T-SQL trong
cng ti liu ny.
Th tc khng c tham s.
Th tc sau s thc hin lit k tt c cc tc gi, sch v nh xut bn m
tc gi vit sch.

Use Pubs
CREATE PROCEDURE au_info_all
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
GO

89
Kt qu thc hin:

Th tc c tham s.
Th tc sau thc hin lc tm tc gi c tn, h truyn theo tham s.

USE pubs
GO
CREATE PROCEDURE au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN
publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO

90
Cch truyn tham s:
+ Gn gi tr theo th t:
EXECUTE au_info 'Dull', 'Ann'
+ Gn gi tr theo tn bin
EXECUTE au_info @lastname = 'Dull', @firstname =
'Ann'
+ Gn gi tr theo tn bin, khng theo th t
EXECUTE au_info @firstname = 'Ann', @lastname = 'Dull'

Th tc c tham s ty la theo gi tr a vo.


V d ny s cp n vic truyn tham s theo mu, gi tr tham s c
ngm nh khi to th tc v th tc khi thc hin s kim tra gi tr tham s nhp
vo.

USE pubs
GO
CREATE PROCEDURE au_info2
@lastname varchar(30) = 'D%',
@firstname varchar(18) = '%'
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname LIKE @firstname
AND au_lname LIKE @lastname
GO

Tham s % xc nh gi tr ty nhp vo tham s, tham s D% xc nh gi


tr u tin ca chui phi bng ch D. Khi ngm nh cc gi tr nh trn tham c
khng c truyn gi tr s t nhn gi tr ngm nh.
Cch truyn tham s nh sau:
+ Khng truyn tham s:
EXECUTE au_info2

91
+ Ch truyn tham s u, tham s sau s nhn gi tr
ngm nh.
EXECUTE au_info2 'Wh%'
+ Ch truyn mt tham s, tham s xn li s nhn gi
tr ngm nh.
EXECUTE au_info2 @firstname = 'A%'
+ Tham s th nht xc nh gi tr mt k t thuc v
tr c [CK] ch nhn k t C hoc K, [OE] ch nhn
gi tr O hoc E.
EXECUTE au_info2 '[CK]ars[OE]n'
+ Xc nh r gi tr tham s
EXECUTE au_info2 'Hunter', 'Sheryl'
+ Xc nh kiu gi tr tham s.
EXECUTE au_info2 'H%', 'S%'

Th tc s dng tham s ly gi tr ra (tham tr).


V d sau s m t k thut s dng tham tr, nh trong cc v d trc ta s
dng tham s truyn gi tr vo tn tham s bt u bng 1 ch @, tham s c
bt u bng 2 ch @@. S c s dng trn nhiu dng lnh, s dng cng t
kha OUTPUT xc nh l tham tr ly gi tr ra.
V d sau thc hin truyn tham s vo v ly gi tr ra:

USE pubs
GO
CREATE PROCEDURE titles_sum @@TITLE varchar(40) = '%',
@@SUM money OUTPUT
AS
SELECT 'Title Name' = title
FROM titles
WHERE title LIKE @@TITLE
SELECT @@SUM = SUM(price)
FROM titles
WHERE title LIKE @@TITLE
GO

Tham s bt u bng 2 k t @@ xc nh c s dng cho nhiu cu


lnh, s dng cng t kha OUTPUT xc nh l bin tham tr.. V d trn s dng
bin @@Title xc nh iu kin a ra tn sch y l loi bin truyn vo s

92
dng cho hai cu lnh Select, bin @@Sum xc nh l bin tham tr dng ly gi
tr ra.
Cch s dng tham s nh sau:
DECLARE @@TOTALCOST money
EXECUTE titles_sum 'The%', @@TOTALCOST OUTPUT
IF @@TOTALCOST < 200
BEGIN
PRINT ' '
PRINT 'All of these titles can be purchased for less
than $200.'
END
ELSE
SELECT 'The total cost of these titles is $'
+ RTRIM(CAST(@@TOTALCOST AS varchar(20)))

V d trn s dng bin @@TOTALCOST vo v tr bin @@SUM trong th tc.


Kt qu thc hin nh sau:

Title Name
-------------------------------------------------------
The Busy Executive's Database Guide
The Gourmet Microwave
The Psychology of Computer Cooking

(3 row(s) affected)

Warning, null value eliminated from aggregate.

All of these titles can be purchased for less than


$200.

Th tc s dng bin OUTPUT kiu con tr (Cursor).


V d sau to th tc c bin kiu Cursor, bin ny s qun l mt bng d
liu c truy vn bng cu lnh Select.

CREATE PROCEDURE titles_cursor @titles_cursor CURSOR


VARYING OUTPUT
93
AS
SET @titles_cursor = CURSOR
FORWARD_ONLY STATIC FOR
SELECT *
FROM titles

OPEN @titles_cursor
GO

Con tr c a vo bin kiu Cursor c tn @Titles_cursor, hng dch chuyn


Forward (tin) v Static. S dng bin nh v d sau:

USE pubs
GO
DECLARE @MyCursor CURSOR
EXEC titles_cursor @titles_cursor = @MyCursor OUTPUT
WHILE (@@FETCH_STATUS = 0)
BEGIN
FETCH NEXT FROM @MyCursor
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
GO

Bin con tr c a vo vin @MyCursor, khi m con tr v tr bn ghi u tin


ca bng c xc nh. Trong v d trn s dng vng lp duyt tng bn ghi,
vic x l d liu thc hin trong vng lp.

Th tc t thuc tnh n kch bn cu lnh.


V d sau s t thuc tnh WITH ENCRYPTION n vn bn trong th tc
vi ngi s dng.

CREATE PROCEDURE encrypt_this


WITH ENCRYPTION
AS
SELECT *
FROM authors

94
GO
Khi s dng th tc h thng sp_helptext xem ni dung th tc:

EXEC sp_helptext encrypt_this

Kt qu nh sau:

The object's comments have been encrypted.

SA, XA TH TC
S dng cng c.
- Chn th tc cn sa, xa -> thc hin sa ni dung hoc chc nng xa.

S dng cu lnh.
- Sa s dng lnh Alter Procedure
- Xa s dng lnh Drop Procedure

Bn c c th t tm hiu v User Defined Function tong Book Online, l i


tng gi l hm thuc CSDL, c chc nng v cch thc hot ng gn ging th
tc.

95
TRIGGER

KHI NIM TRIGGER.


Trigger l mt th tc c bit m vic thc thi ca n t ng khi c s kin
xy ra, cc s kin gi th tc c bit ny c nh ngha trong cu lnh, thng
thng c thc hin vi cc s kin lin quan n Insert, Update, Delete d liu.
Trigger c s dng trong vic bo m ton vn d liu theo quy tc xc
nh, c qun l theo bng d liu hoc khung nhn.

NHNG TRNG HP S DNG TRIGGER.


- S dng Trigger khi cc bin php ton vn d liu nh Constraint, rule,
khng bo m. Khc vi cc cng c bao m ton vn d liu nu, cc cng
c ny s thc hin kim tra tnh ton vn trc khi a d liu vo CSDL (cn gi
l Declarative Data Integrity), cn Trigger thc hin kim tra tnh ton vn khi
cng vic thc hin ri (cn gi l Procedural Data Integrity).
- Khi CSDL cha c chun ha (Normalization) th c th xy ra d liu
tha, cha nhiu v tr trong CSDL th yu cu t ra l d liu cn cp nht
thng nht trong mi ni. Trong trng hp ny ta phi s dng Trigger.
- Khi thay i day 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).

C IM CA TRIGGER.
- Mt trigger c th thc hin nhiu cng vic (theo kch bn), c th nhiu
s kin kch hot thc thi trigger, c th tch ri cc s kin trong mt trigger.
- Trigger khng c to trn bng temprate hay system.
- 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 Table, Deleted Tabla, l 2 bng tm thi
ch cha trong b nh, cc bng ny ch c s dng vi cc lnh trong trigger.

96
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 n s b qua v thay vo n l cc lnh thc hin trong
trigger. After (tng ng vi t kha For) y l loi ngm nh, khc vi loi
Instead of th loi trigger ny s thc hin cc lnh trong n sau khi thc hin
xong s kin gi n.

TO TRIGGER.
To trigger c thc hin thng cng c v cu lnh:
To trigger bng cng c.
- Chn bng d liu hoc khung nhn.
- Nhn nt phi chut.
- Chn All tasks -> Manage Triggers...

- Son kch bn to trigger.

(C php c th hn bn xem trong phn tip theo)


To trigger bng cu lnh.
S dng lnh Create Trigger, c php chung nh sau:

97
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
}]
sql_statement [ ...n ]
}
}

Cc tham s c bn:
+ trigger_name: Tn trigger.
+ table/view: Tn bng hoc khung nhn.
+ For/After/Instead Of: Loi trigger.
+ { [DELETE] [,] [INSERT] [,] [UPDATE] }: S kin khi t ng gi thc
thi trigger.
+ sql_statement [ ...n ]: Kch bn cc cu lnh x l ca trigger.

Cc cu lnh sau khng c thch thi trong kch bn cc cu lnh x l ca


trigger:

ALTER DATABASE CREATE DATABASE DISK INIT


DISK RESIZE DROP DATABASE LOAD DATABASE
LOAD LOG RECONFIGURE RESTORE DATABASE
RESTORE LOG

c th hn ta xt mt s v d sau:

98
V d to mt trigger thng bo.

CREATE TRIGGER reminder


ON titles
FOR INSERT, UPDATE
AS RAISERROR (50001, 16, 10)
GO
V d trn to mt thng bo cho cc client khi thc hin thm hoc sa d
liu trn bng Titles, m thng bo l 50001, l m thng bo do ngi dng nh
ngha.
to thng bo bn thao tc nh sau:
- Vo menu Tools -> Manage SQL Server Messages

- Chn bng Messages -> New

- t m, son ni dung, kiu thng bo (Serverity), m thng bo s c


s dng trong cc ng dng hoc cu lnh yu cu.
99
V d to trigger t ng gi Email khi c thc thi.

CREATE TRIGGER reminder


ON titles
FOR INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail 'MaryM',
'Don''t forget to print a report for the
distributors.'
GO

V d to trigger kim son khong gi tr gia 2 bng.


V d sau s to trigger thc hin kim sot phm v mc lng ca mt
nhn vin va chn vo c thuc gi tr nh mc lng trong bng mc lng hay
khng.

CREATE TRIGGER employee_insupd


ON employee
FOR INSERT, UPDATE
AS
DECLARE @min_lvl tinyint,
@max_lvl tinyint,
@emp_lvl tinyint,
@job_id smallint
SELECT @min_lvl = min_lvl,
@max_lvl = max_lvl,
@emp_lvl = i.job_lvl,
@job_id = i.job_id
FROM employee e INNER JOIN inserted i ON e.emp_id =
i.emp_id
JOIN jobs j ON j.job_id = i.job_id
IF (@job_id = 1) and (@emp_lvl <> 10)
BEGIN
RAISERROR ('Job id 1 expects the default level of
10.', 16, 1)
ROLLBACK TRANSACTION
END
ELSE
IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl)

100
BEGIN
RAISERROR ('The level for job_id:%d should be
between %d and %d.',
16, 1, @job_id, @min_lvl, @max_lvl)
ROLLBACK TRANSACTION
END

SA, XA TRIGGER.
S dng cng c.
- Chn trigger trong mc Manage Triggers
- Thc hin sa ni dung hoc xa.

Sa, xa theo cu lnh.


- S dng lnh Alter trigger sa.
- S dng lnh Drop Trigger xa.
(Bn c th tm hiu chi tit hn trong Book Online)

101
XUT NHP D LIU

Trong chng ny bn c s tm hiu k thut trao i d liu vi cc mi


trng ngoi Server ca SQL, c th vi mt CSDL khc, mt Server SQL khc,
mt h qun tr CSDL khc hoc ni ghp tp tin CSDL.

SERVER LIN KT LINKED SERVER.


Tng t nh cc h qun tr CSDL ln khc (Access, Oracle), h thng
cung cp cng c lin kt vi h qun tr CSDL khc. Khi lin kt c thit
lp, vi quyn hn ca user lin kt bn c th thc hin khai thc d liu lin kt
trn SQL Server.
To ODBC.
ODBC vit tt ca cm t Open DataBase Connectivity, l cng c c
Windows cung cp vi mc ch lm mi trng trao i d liu gia nhng
CSDL, gia nhiu h qun tr CSDL vi ng dng.
ODBC to nhng chun chung nht kt ni n CSDL v ng dng. Khi
thc hin khai thc d liu thng qua ODBC, ng dng lin kt theo tn ODBC,
quyn hn khai thc thc hin khi to kt ni t ODBC n CSDL.
Cch to ODBC:
- Chn ODBC trong Control panel.

102
- Chn bng User DSN -> Add

- Chn Driver ca h qun tr CSDL ca CSDL cn lin to ODBC.


- Chn Finish.

- Nhp tn ODBC (tn ny s s dng cho ng dng khc, nn nhp theo


chun chung d s dng), cc tham s khc ( y trn hnh s dng
Driver ca SQL Server nn bn phi chn Server).
- Next.

103
- Nhp Login ID, mt khu -> Next.

- nh du Change the default database to -> Chn CSDL -> Next ->
Finish
Sau khi to xong trong danh sch xut hin ODBC bn va to, t danh sch
bn c th sa i, xa ODBC khi cn thit.

104
To lin kt t Access.
T h qun tr CSDL Access bn c th to lin kt n cc h qun tr
CSDL khc (Acess, Dbase,), hoc thng qua ODBC. Trong v d minh ha s
dng lin kt t Access vi ODBC (i vi SQL Server hoc Oracle, My SQL th
Access phi lin kt thng qua ODBC v cc h qun tr CSDL ny khng thc
hin khai thc d liu qua tp tin ch khai thc thng qua tn CSDL, m Access ch
thc hin theo phng thc m tp tin).
Cc bc thc hin nh sau:
- M h qun tr CSDL Access.
- M hoc to CSDL mi t Access
- Chn File -> Get External Data -> Link Tables.

105
- Chn ODBC Databases.

- Chn ODBC cn lin kt (Authors).

- Ok.
- Nhp Login ID v mt khu.
- Chn bng hoc khung nhn cn lin kt trong danh sch.

106
- Nhn Ok, danh sch cc bng trong Access c khai thc tng t nh
cc bng khc.

107
To Server lin kt Linked Server.
T SQL Server c th to lin kt trc tip n cc h qun tr CSDL khc
(Access, SQL Server, Oracle, My SQL,...) m khng cn thit phi thng qua
ODBC nh Access xt trc.
To bng cng c.
- Vo mc Security -> Linked Server.

- Nhn nt phi chut -> New Linked Server.

- Nhp cc tham s:

108
+ Tn Server.
+ Provider (Driver ca h qun tr CSDL cn thit lp lin kt, trong v
d minh ha thc hin vi Access).

- Thc hin khai thc thng qua cu lnh, trong cu lSQL phi ch ng
dn, v d
Select * from Biblio...Authors
s thc hin lit k ton b danh sch cc bn ghi ca bng authors.

109
To bng cu lnh.
S dng lnh sp_addlinkedserver to server lin kt.
V d to Linked Server Biblio:

sp_addlinkedserver 'Biblio',
Access 97', 'Microsoft.Jet.OLEDB.4.0',
'c:\data\biblio.mdb'

(ng dn phi ph hp vi Server)

Xa Linked Server.
- S dng cng c: Chn Linked Server cn xa -> thc hin xa.
- S dng lnh :

sp_dropserver [ @server = ] 'server'


[ , [ @droplogins = ] { 'droplogins' | NULL} ]

S DNG BCP V BULK INSERT NHP D LIU.


Bcp l cu lnh dng command prompt, dng xut (export) v nhp (import)
d liu gia SQL Server v tp tin (dng text hoc excel). Cc tp tin tham gia xut
nhp phi c cu trc d liu kiu bng (hng, ct), bng d liu ca SQL Server
khi thc hin nhp d liu phi c cu trc tng ng c sn.
Bulk insert l cu lnh tng t bcp nhng ch thc hin import d liu m
khng export.
C php lnh bcp.
Lnh bcp c thc hin ti ca s lnh (command prompt).

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}


{in | out | queryout | format} data_file
[-m max_errors] [-f format_file] [-e err_file]
[-F first_row] [-L last_row] [-b batch_size]
[-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
[-q] [-C code_page] [-t field_term] [-r row_term]

110
[-i input_file] [-o output_file] [-a packet_size]
[-S server_name[\instance_name]] [-U login_id] [-P password]
[-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]

(bn tm hiu thm trong book online)


V d s dng lnh bcp.
+ S dng lnh c t kha out copy ton b d liu t mt bng hoc khung
nhn ra tp tin.
bcp pubs..titleview out titleview.txt -c -Sservername -
Uusername -Ppassword

+ S dng lnh Select copy mt tp ra tp tin, c t kha queryout.

bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER


BY au_lname" queryout c:\Authors.txt -c -Sservername -
Uusername -Ppassword

Kt qu thc hin: Ni dung tp tin Authors.txt

Abraham Bennet
Reginald Blotchet-Halls
Cheryl Carson
Michel DeFrance
Innes del Castillo
Ann Dull
Marjorie Green
Morningstar Greene
Burt Gringlesby
Sheryl Hunter
Livia Karsen

111
Charlene Locksley
Stearns MacFeather
Heather McBadden
Michael O'Leary
Sylvia Panteley
Albert Ringer
Anne Ringer
Meander Smith
Dean Straight
Dirk Stringer
Johnson White
AkikoYokomoto

Mt s tham s c bn:
- Out: Copy ton b mt Table hoc view ra tp tin.
- Queryout: Copy tp d liu c truy vn theo cu lnh.
- c: Ch ra rng cu lnh dng kiu k t phn nh cc ct, nu khng
ch th cu lnh t nhn tab (\t) phn nh v dng new line xung dng mi.

C php lnh Bulk Insert.


Lnh Bulk Insert gn ging lnh bcp nhng Bulk Insert ch s dng nhp
d liu vo SQL Server (Insert), lnh ny c thc hin bng SQl Query
Analyzer.
C php chung:

BULK INSERT [ [ 'database_name'.] [ 'owner' ].] { 'table_name' FROM 'data_file' }


[ WITH
(
[ BATCHSIZE [ = batch_size ] ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ]
[ [ , ] DATAFILETYPE [ =

112
{ 'char' | 'native'| 'widechar' | 'widenative' } ] ]
[ [ , ] FIELDTERMINATOR [ = 'field_terminator' ] ]
[ [ , ] FIRSTROW [ = first_row ] ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ]
[ [ , ] LASTROW [ = last_row ] ]
[ [ , ] MAXERRORS [ = max_errors ] ]
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]
[ [ , ] ROWS_PER_BATCH [ = rows_per_batch ] ]
[ [ , ] ROWTERMINATOR [ = 'row_terminator' ] ]
[ [ , ] TABLOCK ]
)
]

V d thc hin copy ton b d liu tp tin newpubs.dat vo bng publishers2


(bng ny c cu trc tng ng), tp tin kiu k t, ngn cch gia cc ct l
du phy ,, xung dng mi bng k t \n (xung dng di v chuyn v u
dng).

BULK INSERT pubs..publishers2 FROM 'c:\newpubs.dat'


WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

DETTACH V ATTACH C S D LIU.


Mc ny s ni v k thut hy v ni ghp tp tin CSDL vi Server. Gi s
bn c cc tp tin ca CSDL (gm tp tin d liu v nht k c th c copy t
v tr khc).
Copy tp tin ca CSDL.
Trc tin ta xem k thut copy cc tp tin CSDL sang mt v tr khc (m
vn gi v tr), sau khi copy sang v tr khc bn c th s dng sang Instance mi.
Cc bc thc hin nh sau:
- Stop dch v SQL ca Instance c CSDL.

113
- Copy cc tp tin ca CSDL sang v tr cn thit.
- Start dch v SQL ca Instance tip tc lm vic.
Dettach c s d liu.
L bc thc hin tch CSDL khi Instance, nntance khng qun l CSDL
nhng khc vi xa CSDL l cc tp tin cha CSDL vn cn.
- Chn CSDL cn dettach. -> All tasks -> Dettach Database

- Nhn Ok.

114
Attach tp tin CSDL vo Instance.
Mc ny gii thiu k thut ghp ni tp tin CSDL vo Instance, l bc tip
theo ca cc bc Copy v Dettach. Cc bc thc hin nh sau:
- Chn Instance cn Attach CSDL -> Databases -> all tasks -> attach
database...
- Chn nt browse (...)

- Chn tp tin mdf ca CSDL cn attach.


- t tn CSDL.
- Xc nh User owner.
- Ok.

IMPORT V EXPORT C S D LIU.


Phn ny s trnh by k thut nhp v xut d liu t CSDL vi cc h qun
tr CSDL khc hoc Instance, CSDL khc ca SQL Server.
Import Nhp d liu.
Dng nhp d liu t ngoi vaof CSDL t h qun tr CSDL khc hoc
CSDL khc ca SQL Server.
- Chn Databases -> All tasks -> Import Data...

115
- Next -> Chn Data Source (C th l SQL Server, Oracle, Access,...), trong
v d minh ha chn Access.
- Chn tp tin (file name) -> Next

- Chn Instance cn chuyn d liu vo, user name., tn CSDL (c trc


hoc to ti thi im ny bng cch chn New) -> Next

116
- Chn cch chuyn ton b bng d liu hay thng qua cu lnh truyn vn
(trong v d minh ha chn bng d liu) -> Next

- Chn cc bng, khung nhn cn Import (c th la chn mt s chc nng


khc c th hn, bn c t tm hiu), tn cc bng, khung nhn ca SQL Server
nhn d liu -> Next.

117
- Chn chc nng thc hin ngy hay theo lch > Next -> Finish

- Xem thng bo sau khi chuyn -> Done

118
EXPORT XUT D LIU.
Phn ny gii thiu k thut xut d liu t mt CSDL ca SQL Server ra
mt h qun tr CSDL khc hoc mt CSDL khc ca SQL Server. Tng t nh
Import nhng Export thc hin Data Source l SQL Server, cn Destination l h
qun tr CSDL khc hoc CSDL khc ca SQL Server (phn ny bn c t xem
xt).

119
SAO LU, KHI PHC D LIU

Chng ny s gii thiu k thut sao lu (backup) v khi phc (restore) d


liu, l k thut thng c s dng bo m an ton d liu phng trng hp
CSDL b hng, nht k d liu. Chc nng ny c thc hin bng 2 phng
php: Bng cng c v cu lnh T-SQL.

NHNG L DO PHI SAO LU V KHI PHC D LIU.


Trong qu trnh thc hin qun tr CSDL SQL Server th mt s nguyn
nhn sau y bt buc bn phi xem xt n k thut sao lu v khi phc d liu:
+ a b hng (cha cc tp tin CSDL).
+ Server b hng.
+ Nguyn nhn bn ngoi (thin nhin, ha hon, mt cp,...)
+ User v tnh xa d liu.
+ B v tnh hay c lm thng tin sai lch.
+ B hack.

CC LOI BACKUP.
Backup d liu trong SQL Server gm cc loi sau:
+ Full Database Backups: Copy ton b CSDL (cc tp tin bao gm cc
bng, khung nhn, cc i tng khc).
+ Differential Database Backups: Copy nhng d liu thay i trong Data
file k t ln full backup gn nht.
+ File or file group backups: Copy mt file n hay file group.
+ Differential File or File Group Backups: Thc hin nh Differential
Database nhng copy phn d liu thay i ca file n hoc file group.
+ Transaction log backups: Ghi nhn tt c cc transaction cha trong
transaction log file k t ln transaction log backup gn nht. Vi loi sao lu ny
ta c th khi phc d liu ti mt thi im.

120
CC M HNH PHC HI D LIU.
+ Full Recovery model: L m hnh phc hi ton b hot ng giao dch
ca d liu (Insert, Update, Delete, hot ng bi lnh bcp, bulk insert). Vi m
hnh ny ta c th phc hi d liu ti mt thi im trong qu kh c lu
trong transaction log file.
+ Bulk-Logged Recovery Model: M hnh ny c thc thi cho cc thao tc
bcp, bulk insert, create index, writetext, updatetext, cc hot ng ny ch nht k
s kin vo log bit m khng sao lu ton b d liu, chi tit nh trong full
recover. Cc s kin Insert, Update, Delete vn c nht k v khi phc bnh
thng.
+ Simple Recovery Model: Vi m hnh ny bn ch phc hi li thi im
backup gn nht m khng theo thi im khc trong qu kh.
Cch t m hnh khi phc:
- Chn CSDL.
- Nhn nt phi chut -> Properties -> Options -> Recovery

121
Xt v d sau: Gi s ta c mt CSDL c backup theo chin lc nh hnh v:

Nhn hnh trn ta thy CSDL c lp lch Full Database Backup vo ngy ch
nht, Differential Database Backup vo ngy th ba v th nm, cn Log Database
Backup vo 5 ngy trong tun, ngy th su c s c vi CSDL data file b hng,
vn t ra l phi phc hi d liu v CSDL hot ng bnh thng. Ta phi lm
cc bc sau:
+ Thc hin Backup log file (gi s log file khng b hng).
+ Khi phc Full Database ca ngy ch nht.
+ Phc hi Differential Database ca ngy th nm.
+ Khi phc Transaction log backup ngy th nm.

SAO LU C S D LIU - BACKUP DATABASE.


Trc khi xem xt k thut sao lu CSDL, ta thng nht mt s thut ng
bng ting Anh nh sau:
+ Backup: L qu trnh copy ton b hoc mt phn database, transaction
log, file, file group thnh lp mt backup set c cha trong backup media (disk
hoc tape) bng cch s dng mt backup device (tape drive name hoc physical
filename).
+ Backup Device: Mt file vt l hoc mt drive tape.

122
+ Backup file: Mt file cha Backup set.
+ Backup media: L Disk hoc tape.
+ Backup set: Mt b backup mt ln backup n cha trn backup media.
Cc bc thc hin backup nh sau:
- Chn CSDL cn backup.
- Nhn phi chut -> All Tasks -> Backup Database

- Nhp cc tham s, la chn kiu.

KHI PHC D LIU RESTORE DATABASE.


L chc nng thc hin khi phc d liu sao lu, ty theo chin lc
backup m bn c th phc hi n thi im no, thu c b d liu trong qu
kh nh th no. Khi phc d liu c thc hin theo th t backup, thng tin
ny c lu tr trong msdb
Cc bc thc hin nh sau:

123
- Chn mc Databases -> Nhn nt phi chut -> All Tasks -> Restore
Database

- Nhp tham s, chn m hnh khi phc.

124
PHN QUYN, BO MT

Chng ny s gii thiu bn c k thut phn quyn, qun l ngi dng,


t cc mc bo mt cho CSDL.

CH BO MT SECURITY MODE.
Nh gp trong phn ci t SQL Server, SQL Server c 2 ch bo mt:

+ Windows Authentication Mode (Windows Authentication)

+ Mixed Mode (Windows Authentication and SQL Server Authentication)

Windows Authentication.

L ch bo mt m nhng User truy nhp SQL Server phi l nhng User


ca Windows. Khi Server t ch bo mt ny, nhng User phi l nhng
User c Windows qun l mi c truy nhp.

Nhn trn hnh ta thy khi thc hin ch ny ngi s dng mun khai thc SQL
Server phi thng qua 4 bc xc thc (1- Domain, 2- Computer, 3- SQL Server,
4- Database).

SQL Server Authentication.

125
Khi thit lp ch bo mt ny, nhng User c quyn khai thc phi l
nhng User do qun tr SQL Server to ra, m nhng user ca Windows khng
c khai thc.

Tuy nhin, SQL Server cho php thit lp hai ch Windows


Authentication Mode (Windows Authentication) v Mixed Mode (Windows
Authentication and SQL Server Authentication), ch Mixed Mode l s kt hp
ca Windows Authentication v SQL Server Authentication, ch ny c user
ca Windows v SQL Server c th thit lp truy nhp SQL Server.

t ch .

- Nhn phi chut chn tn Server (Instance).


- Chn Properties.
- Chn bng Security.

126
- Chn ch bo mt -> Ok

SERVER ROLE, DATABASE ROLE.

Role l i tng xc nh nhm thuc tnh gn quyn cho cc user tham


gia khai thc SQL Server.

Server Role.

Nhm cc quyn thc hin qun tr h thng, gm cc nhm sau:

+ Bulk Insert Administrators: c php thc hin Bulk Insert.

+ Database Creators: c php to v sa i cu trc CSDL.

+ Disk Administrators: C th qun tr cc file trn a.

+ Proccess Administrator: Qun tr cc dch v ang chy ca SQL Server.

+ Security Administrators: Qun tr h thng bo mt.

+ Setup Administrators: Qun tr cc th tc m rng (xp_).

127
+ System Administrators: Qun tr h thng SQL Server.

Xem c th nh sau:

- M rng Server (nhn du + phn tn Server).


- M rng Security.
- Chn Server Roles:

Database Role.
Role l i tng m thng qua n ngi qun tr c th gn quyn khai thc
cho ngi s dng. Role do CSDL qun l, khi to CSDL h thng t t mt s
Role ngm nh.

128
Ngi nhng Role ngm nh ta c th to Role mi.

To Role theo cng c.

- Chn Roles trong CSDL -> Nhn phi chut -> New Database Role..
- t tn, chn user (chn user c th lm sau).
- Nhn Ok.

Sau khi to xong, thc hin gn quyn khai thc cho Role.
- Chn Role cn gn quyn.

- Chn Perrmissions...

129
- t cc quyn cho tng i tng trong CSDL.

Nu chn quyn nhn chn xut hin du chn mu xanh, nu cm nhn


chn xut hin du mu . C th t quyn khai thc i vi role cho tng ct
ca bng d liu.
Mi thao tc xa, sa c thc hin nh cc i tng khc.

To theo cu lnh.
S dng cu lnh

sp_addrole [ @rolename = ] 'role'


[ , [ @ownername = ] 'owner' ]

V d: Thm Role c tn Managers:


EXEC sp_addrole 'Managers'

130
QUN TR NGI DNG.
Ngi dng trong SQL Server c chia thnh 2 mc: Ngi truy nhp vo
SQL Server gi l Login, ngi khai thc CSDL gi l User.
Login.
L i tng c quyn truy nhp vo SQL Server, ty theo ch bo mt
ca SQL Server m nhng login l account ca Windows NT hay ca SQL Server,
login do Server qun l trc tip.
To bng cng c.
- Chn chc nng Security ca Server -> Logins
- Nhn phi chut -> New Login...

- Nhp cc tham s: Nu chn Account ca Windows NT th bn c th chn


trong danh sch. Nu to login ca SQL Server th bn nhp tn mi, mt khu,
chn login thuc server role no, c th gn quyn truy nhp khai thc CSDL no.
To bng cu lnh. S dng cu lnh

sp_addlogin [ @loginame = ] 'login'


[ , [ @passwd = ] 'password' ]
[ , [ @defdb = ] 'database' ]
[ , [ @deflanguage = ] 'language' ]

131
[ , [ @sid = ] sid ]
[ , [ @encryptopt = ] 'encryption_option' ]

V d: To login c tn Albert, mt khu corporate


EXEC sp_addlogin 'Albert', 'food', 'corporate'

Mi thao tc sa, xa c thc hin nh cc i tng khc.

User.
User l i tng khai thc CSDL, nu login ch xc nh truy nhp vo SQL
Server th User l login ID tham gia khai thc CSDL, user do CSDL qun l trc
tip.
- Chn CSDL -> users
- Nhn phi chut -> new user...

- Chn Login, nhp user name, chn role m user thuc ->Ok
Cc thao tc xa, sa thc hin nh cc i tng khc, gn quyn cho user bn
c th chn li user va to cho CSDL sau vo nhn vo Permissions.

132
NHN BN D LIU

Chng ny bn s gii thiu vi bn k thut lm gim lu lng d liu


giao dch vi SQL Server khi cu hnh nhiu Server trn mng.

GII THIU V NHN BN D LIU.


Nhn bn d liu tn ting anh gi l Replication, l cng c c s dng
copy mt hoc nhiu CSDL n mt hoc nhiu server (SQL Server) khc, cc
Server c t trong mng my tnh ni b (LAN), ngi khai thc c th thc
hin truy nhp n CSDL c trong Server c chuyn d liu n. D liu gia
cc my c thc hin ng b vi nhau theo lch hoc theo s kin, khi c yu
cu. Nhn bn d liu c nhng u im sau:
+ D liu c lu tr nhiu ni, hiu qu trong vic c nhiu ng dng
cng truy nhp, khai thc.
+ Thch hp cc ng dng phn tch d liu OLTP ca DataWare House.
+ C th khai thc d liu khi khng kt ni n Server.
+ Gim thiu xung khc do s lng ln cc giao dch trn mng.
+ L mt gii php an ton khi Server b li hoc bo dng.
M hnh nhn bn.
Dch v nhn bn d liu gm cc thnh phn c bn sau: Publisher,
Distributor, Subscribers, Publications, Articles, Subscriptions.
Publisher: L server cung cp d liu nhn bn cho cc server khc. Mt publisher
c th thit lp nhiu b d liu nhn bn (gi l publication).
Distributor: L server qun l cc thng tin nhn bn, lu tr d liu trong cc giao
dch thc hin nhn v chuyn d liu t Publisher n cc Subscriber. Remote
distributor l server tch ri khi publisher v c cu hnh l distributor. Local
distributor l mt server c cu hnh l Publisher v Distributor.
Subscriber: L server nhn d liu nhn bn. Subscriber gn lin vi publication (l
my ch nhn d liu nhn bn ca mt b d liu cu hnh nhn bn).
Article: L mt bng, tp d liu hoc i tng ca CSDL cu hnh nhn bn.
Publication: L mt tp gm mt hoc nhiu article.
Subscription: L mt giao dch yu cu bn sao b d liu hoc cc i tng ca
CSDL thc hin nhn bn. Trong mi giao dch publisher thc hin dy (push
subscription) d liu, subscriber thc hin ko (pull subscription).

133
Nhn bn d liu c thc hin theo nhng m hnh c bn sau:
+ Central Publisher: L m hnh Publisher v Distributor thit lp trn mt my.
Gm cc m hnh sau:
- Mt Publishers v mt Subscriber:

- Mt Publisher v nhiu Subscriber.

134
- Publisher v Subscriber c thit lp trn mt my:

+ Publisher v Distributor khng thit lp trn mt my:

+ Republisher: L m hnh Publisher xut bn d liu n Subscriber, sau


Subscriber c thit lp l Publisher xut bn d liu n Subscriber khc.

135
ng truyn gia hai my c thit lp l Publisher c th tc thp,
ph hp vi v tr xa nhau. V d m hnh gia cc vng cch xa nhau:

+ Central Subscriber: L m hnh Subscriber thit lpn nhn d liu xut bn t


nhiu Publisher.

136
Nhng kiu nhn bn d liu.
C 3 kiu nhn bn d liu Snaphot, Transaction, Merge.
Snapshot replication: L kiu nhn bn thc hin sao chp, phn tn d liu hoc
cc i tng ca CSDL to mt thi im.
Snapshot thng c s dng cho nhng tnh hung sau:
+ D liu thng l tnh, t thay i.
+ Nhn bn s lng d liu nh.

Transaction replication: L kiu nhn bn m bt u bng nhn bn snapshot, sau


s thc hin nhn giao dch d liu theo cc s kin insert, update, delete v
nhng thay i lin quan n thc hin stored procedure, index view.
Nhn bn kiu ny cho php thc hin lc d liu ti xut bn, cho php user
sa i d liu nhn bn ti subscriber v chuyn d liu sa i n Publisher
hoc Subscriber khc, d liu sa i ny c th coi l d liu c xut bn.
Nhn bn kiu ny c thc hin khi:
+ Mun sa i d liu c xut bn chuyn n Subscriber, thi gian thc
hin theo giy, hoc tc thi.
+ Cn giao dch trn ton b h thng nhn bn d liu (d liu c th
chuyn n tt c cc Subscriber hoc khng chuyn n Subscriber no).

137
+ Subscriber thng xuyn kt ni vi Publisher.

Merge replication: L kiu nhn bn d liu cho php thc hin nhn sa i d
liu trn nhiu Subscriber, c th kt ni (online) hoc khng kt ni (offline) n

138
Publisher. D liu s c ng b theo lch hoc theo yu cu, d liu cp nht c
thi im sau s c chp nhn.
Kiu nhn bn ny thc hin khi:
+ Nhiu Subscriber c nhu cu cp nht d liu v chuyn d liu cp nht
n Publisher hoc Subscriber khc.
+ Subscriber yu cu nhn hoc chuyn d liu khi offline, ng b d liu
vi cc Subscriber v Publisher sau.

CU HNH PUBLISHER V DISTRIBUTOR.


Trc khi thc hin cu hnh cc my thnh Publisher hay Distributor ta phi
thc hin chy dch v SQL Server Agant trong chc nng Service manager. cc
bc cu hnh nh sau:
- Chn Server cn cu hnh -> Replication
- Nhn phi chut -> Configure Publishing Subscription and Distribution...

- Thc hin thao cc bc:


+ Chn th mc Snapshot: Th mc ny s s dng cho

139
- t tn CSDL ca Distribution.

- Chn Server cu hnh thnh Publisher.

140
- Chn CSDL tham gia nhn bn, kiu nhn bn.

- Chn Server c cu hnh l Subscriber ca Publisher ang thit lp.

- Kt thc.

TO PUBLICATION.
Bc ny s thc hin to Publication, cch thc hin nh sau:
+ Chn Publication trong Replication ca Publisher.
+ Nhn phi chut -> New Publication...

141
+ Thc hin theo cc bc:
- Chn CSDL cn xut bn d liu hoc i tng.
- Chn kiu nhn bn (trong v d ny thc hin kiu Merge)

- Chn phin bn SQL Server ca Subscriber.

- Chn Article tham gia Publication.

142
- t tn cho Publication.

- Kt thc.

TO PUSH SUBSCRIPTION.
Bc ny thc hin to th tc y (push) t Publisher (Distributor trong v
d ny) n Subscriber, c thc hin trn Publisher. Cc bc thc hin nh sau:

143
- Chn Publication ca Publisher -> Nhn phi chut -> Push new
Subscription...

- Chn Subscriber.

- Chn CSDL trn Subscriber nu c, nu cha c thc hin chn chc


nng to mi.

144
- Chn lch thc hin ng b d liu.

- Kt thc. Sau khi thit lp xong trn Subscriber s c CSDL theo tn


to.

TO PULL SUBSCRIPTION.
Bc ny thc hin to cng c ko d liu nhn bn t Publisher v
Subscriber, c thc hin trn Subscriber.
- Chn Subscription ca Subscriber -> Nhn phi chut -> New Pull
Supcription...
- Thc hin theo cc bc:
+ Chn Publication.

145
- Chn Agent tham gia kt ni Publisher.

- Chn CSDL ch.


146
- Thc hin tip cc bc v kt thc.
Nu to Push Subscription vi mt CSDL s khng c to Pull
Subscription vi CSDL .

THC HIN NG B D LIU.


Sau khi thit lp theo cc m hnh nhn bn xong, bn c th thc hin ng
b d liu bng cch:
- Thc hin theo lch.
- Theo yu cu: Chn Subscription (Push hoc Pull) -> Nhn phi chut ->
Start Synchronizing

Sau khi thc hin xong d liu s c ng b gia Publisher v


Subscriber. Ngoi thc hin theo cng c bn c th tm hiu thc hin nhn bn
theo cu lnh T-SQL hoc Stored Procedure.

147
Phn 2. CU LNH T-SQL

Trong phn ny s gii thiu cu trc, k thut son kch bn lnh T-SQL,
i vi cc h qun tr CSDL Foxfro, Access th cu lnh thc hin truy vn, khai
thc CSDL l ngn ng truy vn SQL (Structure Query Language), cc lnh c
thc hin theo tng cu lnh m khng thc hin theo kch bn hoc theo tp hp
nhiu cu lnh vi nhau. i vi h qun tr CSDL Oracle th ngn ng truy vn d
liu l SQL/PL (SQL Plus), cn SQL Server ngn ng c tn Transact-SQL vit tt
l T-SQL.

NH NGHA D LIU (DATA DEFINITION LAGUAGE - DDL).


Phn ny s xem xt cc lnh lin quan n to mi, sa i, xa cc i
tng lin quan n Table, View v cc i tng khc.
To kiu d liu mi.
To kiu d liu dng user-defined.
C php:

sp_addtype [ @typename = ] type,


[ @phystype = ] system_data_type
[ , [ @nulltype = ] 'null_type' ]
[ , [ @owner = ] 'owner_name' ]

V d:
sp_addtype ssn, varchar(11), NOT NULL

Xa kiu d liu to.


C php:

sp_droptype [ @typename = ] 'type'

V d:
Sp_droptype ssn

To rng buc (Constraint).


To rng buc c thc hin trong 2 cu lnh Create Table hoc Alter
Table: Check, Default, Foreign Key, Primary Key, Unique.
148
Xt mt s v d sau:
+ To mt Check. trong bng authors.
ALTER TABLE authors ADD CONSTRAINT chau_id CHECK(au_id
LIKE [0-9][0-9][0-9]-[0-9][0-9]- [0-9][0-9] [0-9][0-9])
+ To Check trong bng Publishers.
ALTER TABLE publishers ADD chpub_id CHECK(pub_id IN (1389,
0736, 0877, 1622, 1756) OR pub_id LIKE 99[0-9][0-9])
+ To rng buc Default.
ALTER TABLE authors ADD DEFAULT UNKNOWN for au_lname
+ To rng buc Foreign Key.
ALTER TABLE titles ADD CONSTRAINT FK_pub_id FOREIGN
KEY(pub_id) REFERENCES publishers(pub_id)
+ To rng buc Primary Key.
ALTER TABLE authors ADD CONSTRAINT UPKCL_auidind PRIMARY
KEY CLUSTERED (au_id)
+ To rng buc Unique.
ALTER TABLE stores ADD CONSTRAINT UNC_name_city UNIQUE
NONCLUSTERED(store_name, city)
Xa rng buc.
S dng Drop trong cc cu lnh Create Table hoc Alter Table.
+ V d xa Constraint s dng cu lnh Alter Table.
ALTER TABLE authors DROP CONSTRAINT UPKCL_auidind
Hin th rng buc.
sp_helpconstraint titltes
To bng.
to bng d liu c th s dng 2 cu lnh Create Table hoc Select Into.
+ To bng tm thi local (l bng ch hin vi phin hin thi, tn bng c bt
u bng mt du #).
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)
+ To bng tm thi global (hin vi tt c cc phin, tn bng c bt u bng 2
du #).
CREATE TABLE ##MyTempTable (cola INT PRIMARY KEY)

149
INSERT INTO ##MyTempTable VALUES (1)
+ To bng d liu.
/* ************************** jobs table ********* */
CREATE TABLE jobs
(
job_id smallint
IDENTITY(1,1)
PRIMARY KEY CLUSTERED,
job_desc varchar(50) NOT NULL
DEFAULT 'New Position - title not formalized
yet',
min_lvl tinyint NOT NULL
CHECK (min_lvl >= 10),
max_lvl tinyint NOT NULL
CHECK (max_lvl <= 250)
)

/* ************************* employee table */


CREATE TABLE employee
(
emp_id empid
CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED
CONSTRAINT CK_emp_id CHECK (emp_id LIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'
or
emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-
9][0-9][FM]'), fname varchar(20) NOT NULL,
minit char(1) NULL,
lname varchar(30) NOT NULL,
job_id smallint NOT NULL
DEFAULT 1
REFERENCES jobs(job_id),
job_lvl tinyint
DEFAULT 10,
pub_id char(4) NOT NULL
DEFAULT ('9952')
REFERENCES publishers(pub_id),
hire_date datetime NOT NULL
DEFAULT (getdate())
)

/* ***************** publishers table *** */


150
CREATE TABLE publishers
(
pub_id char(4) NOT NULL
CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED
CHECK (pub_id IN ('1389', '0736', '0877',
'1622', '1756')
OR pub_id LIKE '99[0-9][0-9]'),
pub_name varchar(40) NULL,
city varchar(20) NULL,
state char(2) NULL,
country varchar(30) NULL
DEFAULT('USA')
)
Xa bng.
S dng lnh Drop Table.
+ Xa bng trong CSDL hin thi:
Drop Table MyTable
+ Xa bng trong CSDL khc.
DROP TABLE pubs.dbo.authors2
i tn bng.
S dng th tc sp_rename
+ i tn bng:
Sp_rename titltes, books
Sa cu trc bng.
S dng lnh Alter Table.
+ Thm mt ct vo bng.
CREATE TABLE doc_exa ( column_a INT)
GO
ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL
GO
EXEC sp_help doc_exa
GO
DROP TABLE doc_exa
GO
+ Xa mt ct khi bng.
CREATE TABLE doc_exb ( column_a INT, column_b
VARCHAR(20) NULL)
151
GO
ALTER TABLE doc_exb DROP COLUMN column_b
GO
EXEC sp_help doc_exb
GO
DROP TABLE doc_exb
GO
To Index.
S dng lnh Create Index.
+ To Index.
SET NOCOUNT OFF
USE pubs
IF EXISTS (SELECT name FROM sysindexes
WHERE name = 'au_id_ind')
DROP INDEX authors.au_id_ind
GO
USE pubs
CREATE UNIQUE CLUSTERED INDEX au_id_ind
ON authors (au_id)
GO
Xem thng tin Index.
S dng th tc sp_helpindex
+ Xem Index ca bng authors.
sp_helpindex authors
Xa Index.
S dng lnh Drop Index.
+ Xa Index ca bng authors.
DROP INDEX authors.au_id_ind
To khung nhn.
S dng lnh Create View.
+ To View.
USE pubs
IF EXISTS (SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'titles_view')

152
DROP VIEW titles_view
GO
CREATE VIEW titles_view
AS
SELECT title, type, price, pubdate
FROM titles
GO
Xa khung nhn.
S dng lnh Drop View.
+ Xa khung nhn.
USE pubs
IF EXISTS (SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'titles_view')
DROP VIEW titles_view
GO
i tn khung nhn.
S dng lnh th tc sp_rename.
+ i tn view.
sp_rename titles_view, view_titles

THAO TC VI D LIU (DATA MANIPULATION LANGUAGE - DML).


Phn ny s xem xt cc cu lnh thao tc vi d liu nh Insert, Select,
Delete.
Lnh Insert - Chn d liu vo bng.
S dng cu lnh Insert.
+ Chn d liu vo tt c cc ct, theo th t ca trong bng.

IF EXISTS(SELECT TABLE_NAME FROM


INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'T1')
DROP TABLE T1
GO
CREATE TABLE T1 ( column_1 int, column_2 varchar(30))
INSERT T1 VALUES (1, 'Row #1')

153
+ Chn d liu vo cc ct khng theo th t.

IF EXISTS(SELECT TABLE_NAME FROM


INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'T1')
DROP TABLE T1
GO
CREATE TABLE T1 ( column_1 int, column_2 varchar(30))
INSERT T1 (column_2, column_1) VALUES ('Row #1',1)

+ Chn d liu s gi tr t hn s ct.

IF EXISTS(SELECT TABLE_NAME FROM


INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'T1')
DROP TABLE T1
GO
CREATE TABLE T1
( column_1 int identity,
column_2 varchar(30)
CONSTRAINT default_name DEFAULT ('column default'),
column_3 int NULL,
column_4 varchar(40)
)
INSERT INTO T1 (column_4)
VALUES ('Explicit value')
INSERT INTO T1 (column_2,column_4)
VALUES ('Explicit value', 'Explicit value')
INSERT INTO T1 (column_2,column_3,column_4)
VALUES ('Explicit value',-44,'Explicit value')
SELECT *
FROM T1

+ Chn d liu vi bng c ct d liu IDENTITY.


V d sau s thc hin chn d liu vo bng c ct kiu IDENITY, ct c
kiu IDENTITY s t ng gn gi tr khi hng mi c to, nn ngi nhp s
khng nhp v sa i. Tuy nhin v th s dng cu lnh SET
IDENTITY_INSERT nhp gi tr.

154
IF EXISTS(SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'T1')
DROP TABLE T1
GO
CREATE TABLE T1 ( column_1 int IDENTITY, column_2
varchar(30))
INSERT T1 VALUES ('Row #1')
INSERT T1 (column_2) VALUES ('Row #2')
SET IDENTITY_INSERT T1 ON
INSERT INTO T1 (column_1,column_2)
VALUES (-99,'Explicit identity value')
SELECT *
FROM T1

Lnh Insert - Chn d liu vo bng kt hp lnh SELECT.


Cu lnh ny c thc hin gn tng t nh cu lnh chn d liu s dng
t kha VALUES, nhng gi tr chn vo c truy vn t cu lnh SELECT. i
vi cc ct d liu c kiu Nchar, Nvarchar h tr Unicode th khi chn d liu
trc tip phi gn thm tin t N, v d Lname=NJohn Smith.
+ Chn d liu c truy vn t cc ct trong lnh SELECT.
USE pubs
INSERT INTO MyBooks
SELECT *
FROM titles
WHERE type = 'mod_cook'

+ Chn d liu c truy vn t mt s ct.

USE pubs
INSERT INTO MyBooks
SELECT title_id, title, type
FROM titles
WHERE type = 'mod_cook'
Lnh Update Sa d liu.

155
Lnh Update s dng sa d liu trong bng hoc View, xem xt cu php
thng qua cc v d sau.
+ Sa d liu s dng lnh Update s dng mnh SET.

UPDATE Northwind.dbo.Products
SET UnitPrice = UnitPrice * 1.1
WHERE CategoryID = 2

Hoc gn gi tr trc tip:


UPDATE authors
SET authors.au_fname = 'Annie'
WHERE au_fname = 'Anne'

Hoc gn gi tr NULL cho mt ct.

UPDATE publishers
SET pub_name = NULL
+ Sa d liu s dng mnh Where xc nh hng c sa d liu.
UPDATE authors
SET state = 'PC', city = 'Bay City'
WHERE state = 'CA' AND city = 'Oakland'

+ Sa d liu s dng mnh From, s dng thng tin t mt bng khc.

UPDATE titles
SET ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM
sales)

Hoc v d gi tr xc nh l tng t bng khc.

UPDATE titles
SET ytd_sales =
(SELECT SUM(qty)

156
FROM sales
WHERE sales.title_id = titles.title_id
AND sales.ord_date IN (SELECT MAX(ord_date)
FROM sales))
FROM titles, sales

+ Sa d liu s dng mnh Top, xc nh s lng hng u tin c sa d


liu.

UPDATE authors
SET state = 'ZZ'
FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname)
AS t1
WHERE authors.au_id = t1.au_id

Lnh WriteText Sa d liu Text, Image.


Lnh WriteText c s dng cp nht ct c kiu Text hoc Image. D liu
kiu Text v Image thng c kch thc ln, c th n Gyga byte, nn lm vic
vi kiu d liu ny phi s dng con tr. s dng c lnh ny trc ht
ngi qun tr (Administrator) phi t thuc tnh select into/bulk copy l true, thc
hin t nh sau:
USE master
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'TRUE'
Vi ct d liu kiu Text, Image ta c th gn gi tr NULL hoc s dng
cc lnh WriteText, UpdateText gn gi tr, khi s dng cc lnh trn, hng d
liu c ct cn chn tn ti (khng ng thi vi cu lnh Insert). Ring i vi
ct d liu kiu Text bn c th s dng lnh thm d liu nh cc ct kiu chui
khc nhng kch thc ca d liu ti a ch c 4096 k t.
+ Thc hin chn on vn bn vo ct d liu kiu Text.

DECLARE @ptrval binary(16)


SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'

157
WRITETEXT pub_info.pr_info @ptrval 'New Moon Books
(NMB) has just released another top ten publication.
With the latest publication this makes NMB the hottest
new publisher of the year!'
GO
Xem v d trn ta thy, chn d liu vo ct Text hoc Image ta phi s
dng con tr kiu binary hoc varbinarry, con tr s c xc nh vo ct text,
image v hng tng ng c trong bng d liu, sau s dng lnh WriteText
gn gi tr. Trong thc t khi thc hin lnh ny ta thng thc hin thng qua
th tc lu tr ca CSDL, gi tr c gn qua bin. Lnh WriteText thng c
s dng khi ct d liu l NULL hoc ton b d liu c (khng chn
thm).

Lnh UpdateText Sa d liu Text, Image.


Lnh UpdateText c chc nng thc hin sa d liu kiu Text, Image, tuy
nhin UpdateText khc WriteTex, UpdateText c th sa., xa d liu theo tng
on hoc thm d liu vo phn d liu c ca ct d liu.
+ C php chung:

UPDATETEXT { table_name.dest_column_name dest_text_ptr }


{ NULL | insert_offset }
{ NULL | delete_length }
[ WITH LOG ]
[ inserted_data
| { table_name.src_column_name src_text_ptr } ]

Trong :
- Insert_offset: Xc nh v tr theo byte d liu s c t vo hoc bt
u xa.
- Delete_length: Xc nh di d liu c xa tnh t v tr insert_offset.
Vic chn, xa, sa d liu c iu khin thng qua cc tham s
insert_offset, delete_offset, v d mun sa d liu, u tin phi xc nh v tr bt
u cn sa d liu (insert_offset) v di d liu cn sa, bt u t v tr cn
xa d liu mi s c chn vo.
+ V d sa ni dung ct kiu Text.

158
USE pubs
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'
GO
DECLARE @ptrval binary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
UPDATETEXT pub_info.pr_info @ptrval 88 1 'b'
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy',
'false'
GO
Cursor - iu khin con tr.
Cursor l kiu bin xc nh con tr cho mt tp d liu, l kt qu ca cu
lnh Select. Cursor c kt hp cng lnh Fetch xc nh v tr hng trong tp
d liu. Cursor c 2 kiu Cursor thng thng v Scroll Cursor.
Cc thao tc thc hin vi Cursor:
+ Declare: Khai bo.
+ Open: M con tr lm vic vi tp d liu.
+ Fetch: Dch chuyn v tr hng trong tp d liu.
+ Close: ng con tr.
+ DeAllocate: Gii phng con tr.
+ V d s dng Curcor, lit k danh sch cc hng ca bng Authors.
USE pubs
GO
DECLARE authors_cursor CURSOR FOR
SELECT au_lname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname

OPEN authors_cursor

-- Perform the first fetch.


FETCH NEXT FROM authors_cursor

159
-- Check @@FETCH_STATUS to see if there are any more
rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is executed as long as the previous fetch
succeeds.
FETCH NEXT FROM authors_cursor
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
+ V d s dng Cursor, gi tr ct c a vo bin.

USE pubs
GO

-- Declare the variables to store the values returned


by FETCH.
DECLARE @au_lname varchar(40), @au_fname varchar(20)

DECLARE authors_cursor CURSOR FOR


SELECT au_lname, au_fname FROM authors
WHERE au_lname LIKE "B%"
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Perform the first fetch and store the values in


variables.
-- Note: The variables are in the same order as the
columns
-- in the SELECT statement.

FETCH NEXT FROM authors_cursor


INTO @au_lname, @au_fname

-- Check @@FETCH_STATUS to see if there are any more


rows to fetch.

160
WHILE @@FETCH_STATUS = 0
BEGIN

-- Concatenate and display the current values in the


variables.
PRINT "Author: " + @au_fname + " " + @au_lname

-- This is executed as long as the previous fetch


succeeds.
FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

+ V d s dng Scroll Cursor, con tr cho php s dng cc phng thc: LAST,
PRIOR, RELATIVE, ABSOLUTE.

USE pubs
GO

-- Execute the SELECT statement alone to show the


-- full result set that is used by the cursor.
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

-- Declare the cursor.


DECLARE authors_cursor SCROLL CURSOR FOR
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Fetch the last row in the cursor.


FETCH LAST FROM authors_cursor

-- Fetch the row immediately prior to the current row


in the cursor.
FETCH PRIOR FROM authors_cursor

161
-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM authors_cursor

-- Fetch the row that is three rows after the current


row.
FETCH RELATIVE 3 FROM authors_cursor

-- Fetch the row that is two rows prior to the current


row.
FETCH RELATIVE -2 FROM authors_cursor

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

Lnh Delete Xa d liu.


S dng lnh Delete xa d liu, kt hp cng iu kin xa mt hay
nhiu hng d liu trong bng.
+ Xa tt c cc hng ca bng.

USE pubs
DELETE authors

+ Xa mt tp cc hng.

USE pubs
DELETE FROM authors
WHERE au_lname = 'McBadden'

+ Xa mt hng t v tr con tr.


USE pubs
DELETE FROM authors
WHERE CURRENT OF complex_join_cursor
Trong v d trn con tr c m c tn complex_join_curcor.

162
+ Xa cc hng da vo lnh truy vn khc hoc lin kt cc bng.

/* SQL-92-Standard subquery */
USE pubs
DELETE FROM titleauthor
WHERE title_id IN
(SELECT title_id
FROM titles
WHERE title LIKE '%computers%')

/* Transact-SQL extension */
USE pubs
DELETE titleauthor
FROM titleauthor INNER JOIN titles
ON titleauthor.title_id = titles.title_id
WHERE titles.title LIKE '%computers%'

+ Xa d liu s dng t kha Top.

DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id

Lnh Truncate Table Xa d liu ton bng.


Tng t nh cu lnh Delete, lnh Truncate Table s dng xa d liu ton
bng, thao tc ny ging lnh Delete khi khng c iu kin Where nhng lnh
Truncate Table thc hin nhanh hn.
TRUNCATE TABLE authors

Lnh Go Nhm lnh.


Lnh Go khng tham gia thao tc vi CSDL, lnh Go xc nh nhm cc
lnh vi nhau, nhm lnh c xc nh t v tr u tin hoc t t lnh Go trc
n lnh Go tip theo. Khi gp lnh Go nhm lnh s c gi ngay n SQL
Server thc hin.

163
USE pubs
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello, World.'
GO -- @MyMsg is not valid after this GO ends the batch.

-- Yields an error because @MyMsg not declared in this


batch.
PRINT @MyMsg
GO

SELECT @@VERSION;
-- Yields an error: Must be EXEC sp_who if not first
statement in
-- batch.
sp_who
GO
Contrrol-of-Flow - iu khin lung.
Tng t nh cc ngn ng lp trnh thit k ng dng, T-SQL cho php
thit lp kch bn cu lnh, cho php s dng cc lnh iu khin khi, lung, vng
lp, iu kin, r nhnh, Sau y l bng cc lnh:

T kha M t
BEGINEND Khi lnh
GOTO Lnh nhy
IFELSE Lnh iu kin
RETURN Thot
WAITFOR Ch thc hin lnh
WHILE..BREAK..CONTINUE Vng lp, thot khi vng lp, quay li lp
CASE R nhnh
DECLARE Khai bo
PRINT In thng bo
RAISEERROR Tr li m li
EXECUTE (EXEC) Thc hin lnh

164
TRUY VN D LU.
Trong trc ta xem xt nhng cu lnh thao tc vi d liu nh Insert,
Update, Delete, phn ny ta s xem xt cc cu lnh khai thc truy vn d liu nh
Select, cc php Join,
Lnh Use - Chn C s d liu.
S dung lnh Use chn CSDL trong kch bn cu lnh.

Use Pubs

Select - Truy vn tt c cc ct t mt bng.

Lnh Select c s dng truy vn d liu t mt hoc nhiu bng, t khung


nhn, kt qu a li mt tp d liu gm cc hng, ct.

USE Northwind
GO
SELECT *
FROM Shippers
GO

Order by - Truy vn sp xp danh sch theo th t.


ASC l sp xp tng, DESC l sp xp gim, khi xc nh sp xp tng bn
c th khng cn t t kha ASC m h thng t xc nh l ASC.

USE Northwind
GO
SELECT *
FROM Shippers
ORDER BY CompanyName DESC
GO

Truy vn mt s ct, xc nh th t cc ct.

165
USE Northwind
GO
SELECT OrderID, ProductID, UnitPrice, Quantity,
Discount
FROM [Order Details]
ORDER BY OrderID ASC
GO

i tn cc ct khi truy vn.

USE Northwind
GO
SELECT OrderID as [Order ID], ProductID as [Product
ID], UnitPrice as [Unit Price], Quantity, Discount
FROM [Order Details]
ORDER BY OrderID ASC
GO

Lnh Case - Phn lp d liu.


Case l cu lnh r nhnh, thng c s dng phn lp d liu trong cu
lnh Select.
V d s dng lnh Case n gin:

USE pubs
GO
SELECT Category =
CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Modern Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Traditional Cooking'
ELSE 'Not yet categorized'
END,
CAST(title AS varchar(25)) AS 'Shortened Title',
price AS Price
FROM titles
WHERE price IS NOT NULL

166
ORDER BY type, price
COMPUTE AVG(price) BY type
GO

V d s dng lnh Case tm kim:

USE pubs
GO
SELECT 'Price Category' =
CASE
WHEN price IS NULL THEN 'Not yet priced'
WHEN price < 10 THEN 'Very Reasonable Title'
WHEN price >= 10 and price < 20 THEN 'Coffee
Table Title'
ELSE 'Expensive book!'
END,
CAST(title AS varchar(20)) AS 'Shortened Title'
FROM titles
ORDER BY price
GO

Kt qu thc hin nh sau:

Price Category Shortened Title


--------------------- --------------------
Not yet priced Net Etiquette
Not yet priced The Psychology of Co
Very Reasonable Title The Gourmet Microwav
Very Reasonable Title You Can Combat Compu
Very Reasonable Title Life Without Fear
Very Reasonable Title Emotional Security:
Coffee Table Title Is Anger the Enemy?
Coffee Table Title Cooking with Compute
Coffee Table Title Fifty Years in Bucki
Coffee Table Title Sushi, Anyone?
Coffee Table Title Prolonged Data Depri
Coffee Table Title Silicon Valley Gastr
Coffee Table Title Straight Talk About
Coffee Table Title The Busy Executive's

167
Expensive book! Secrets of Silicon V
Expensive book! Onions, Leeks, and G
Expensive book! Computer Phobic And
Expensive book! But Is It User Frien

(18 row(s) affected)

t tn cho ct.
S dng du phy xc nh tn ct, ti a l 30 k t.

SELECT sum= SUM(ytd_sales) FROM titles

Khi cn th hin du phy trn gi tr hoc tn ct ta cn s dng 2 du lin


nhau. V d I dont understand.

Chui k t trong kt qu truy vn.


S dng du phy trong chui k t.

SELECT The publishers name is, publisher=pub_name


FROM publishers

Cc gi tr tnh ton c.
i cc kiu d liu tnh ton c s dng cc php ton +, -, *, /, %.

SELECT title_id, ytd_sales*2 FROM titles

Truy vn kiu d liu Text, Image.


truy vn d liu Text, Image c th s dng 2 lnh Select hoc ReadText.
Khi s dng lnh Select truy vn kiu d liu ny th ch truy vn c d liu
c di xc nh trc bng cu lnh SET TEXTSIZE.

SET TEXTSIZE 25

168
SELECT pub_id, pr_info FROM pub_info

Ngm nh kch thc s dng cho truy vn l 4096 (4K).

T kha Distinct Truy vn cc hng khc nhau theo ct.


truy vn cc hng d liu khc nhau theo ct ta s dng t kha Distinct.

USE pubs
SELECT DISTINCT au_id
FROM titleauthor

Xc nh bng trong mnh From.

USE pubs
SELECT p.pub_id, p.pub_name
FROM publishers p

Mnh Where.
Mnh Where xc nh iu kin cc hng c truy vn, biu thc trong
mnh Where xc nh theo biu thc logic. Cc php ton, cu lnh xc nh
gm:
- Cc php ton so snh: =, <>, <, >, !<, !>.
- T kha xc nh phm vi: Between, Not Between.
- Danh sch: In, Not In.
- Theo mu inh dng: Like, Not Like.
- Gi tr NULL: Is Null, Is Not Null.
- Cc php ton logic: And, Or.

+ T kha Between:

SELECT UnitsInStock, ProductID, ProductName

169
FROM Northwind.dbo.Products
WHERE UnitsInStock BETWEEN 15 AND 25
ORDER BY UnitsInStock

+ T kha Not Between.

SELECT UnitsInStock, ProductID, ProductName


FROM Northwind.dbo.Products
WHERE UnitsInStock NOT BETWEEN 15 AND 25
ORDER BY UnitsInStock

+ T kha In, Not In.

USE pubs

SELECT au_lname, state


FROM authors
WHERE state IN ('CA', 'IN', 'MD')

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE au_id IN
(SELECT au_id
FROM titleauthor
WHERE royaltyper < 50)

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE au_id NOT IN
(SELECT au_id
FROM titleauthor
WHERE royaltyper < 50)

+ T kha Like.

170
T kha Like c s dng tng t nh php so snh, php Like c thc
hin cho d liu kiu chui, php Like c xem l php so snh theo nh dng
ca chui, vic nh dng xc nh theo mt s t kha sau:

% Xc nh bt k chui k t no hoc khng c k t no ti v tr.


_ Mt k t bt k no .
[] Mt k t no nm trong phm vi, v d [a-f].
[^] Xc nh mt k t khng thuc phm vi no , v d [^a-f].

V d s dng t kha Like vi %:

USE pubs
GO
SELECT phone
FROM authors
WHERE phone LIKE '415%'
ORDER by au_lname
GO

V d t kha Not Like vi %:

USE pubs
GO
SELECT phone
FROM authors
WHERE phone NOT LIKE '415%'
ORDER BY au_lname
GO

V d s dng t kha Like vi mnh Escape: Escape c s dng loi b mt


k t hoc chui khi php so snh.

USE pubs
GO

171
IF EXISTS(SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytbl2')
DROP TABLE mytbl2
GO
USE pubs
GO
CREATE TABLE mytbl2
(
c1 sysname
)
GO
INSERT mytbl2 VALUES ('Discount is 10-15% off')
INSERT mytbl2 VALUES ('Discount is .10-.15 off')
GO
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!'
GO

V d s dng t kha Like vi []:

USE pubs
GO
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE '[CK]ars[eo]n'
ORDER BY au_lname ASC, au_fname ASC
GO

+ Gi tr NULL.
Gi tr NULL c nhp bng cch t ngm nh hoc gn theo cu lnh.
tm gi tr NULL trong bng s dng t kha Is Null hoc Is Not Null.

SELECT title_id, type, advance


FROM pubs.dbo.titles
WHERE advance IS NULL

172
TO BNG BNG LNH SELECT INTO.
Lnh Select Into truy vn d liu, d liu c a vo mt bng mi. Nu
thuc tnh select into/bulkcopy c t c th to bng c nh, nu thuc tnh
khng c t ta c th to bng tm thi.

SELECT Shippers.*, Link.Address, Link.City,


Link.Region, Link.PostalCode
INTO NewShippers
FROM Shippers
JOIN LinkServer.DB.dbo.Shippers AS Link
ON (Shippers.ShipperID = Link.ShipperID)

LNH COMPUTE BY.


Khi thc hin vi cc hm tnh ton SUM, AVG, MIN, MAX, COUNT
thng c s dng vi cc mnh GROUP BY, COMPUTE BY (khng p
dng cc hm tnh ton vi d liu kiu Text, Image).

+ S dng Group By: T kha Group By c s dng nhm theo ct, c th kt


hp cc hm tnh ton.

USE Northwind
SELECT OrdD.ProductID AS ProdID,
SUM(OrdD.Quantity) AS AmountSold
FROM [Order Details] AS OrdD JOIN Products as Prd
ON OrdD.ProductID = Prd.ProductID
AND Prd.CategoryID = 2
GROUP BY OrdD.ProductID

+ S dng mnh Compute: Tnh ton ton b gi tr.

USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance)

173
+ S dng mnh Compute By: Tnh ton theo nhm (tng t Group By).

USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type

TON T UNION.
Ton t Union thc hin hp 2 tp vi nhau, php ton ny thc hin ch ly
i din khi c hai hng ca hai tp trng nhau.
Gi s c 2 bng d liu nh sau:

Table1 Table2
ColumnA ColumnB ColumnC ColumnD
char(4) int char(4) int
------- --- ------- ---
abc 1 ghi 3
def 2 jkl 4
ghi 3 mno 5
Thc hin ton t Union:

SELECT * FROM Table1


UNION
SELECT * FROM Table2

Kt qu thc hin:

ColumnA ColumnB
------- --------
abc 1
def 2
ghi 3
jkl 4

174
mno 5

Khi s dng t kha ALL ton b cc hng ca hai tp d liu s c hp


li, khng loi b nhng hng trng nhau.

SELECT * FROM TableA


UNION ALL
( SELECT * FROM TableB
UNION
SELECT * FROM TableC
)
GO

S dng ton t Union vi Select Into:

USE Northwind
IF EXISTS(SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'CustomerResults')
DROP TABLE CustomerResults
GO
USE Northwind
SELECT ContactName, CompanyName, City, Phone INTO
CustomerResults
FROM Customers
WHERE Country IN ('USA', 'Canada')
UNION
SELECT ContactName, CompanyName, City, Phone
FROM SouthAmericanCustomers
ORDER BY CompanyName, ContactName ASC
GO

TRUY VN D LIU T NHIU BNG.


Truy vn d liu t nhiu bng c xc nh theo quan h gia cc ct ca
cc bng vi nhau. C th truy vn thng qua iu kin lin kt trong mnh
Where hoc t kha Join.

175
Theo iu kin lin kt.
S dng iu kin lin kt theo ct gia cc bng, thng tin cn truy vn
c t nhiu bng khc nhau, truy vn c cc thng tin nh trn phi xc
nh iu kin lin kt gia cc bng.
+ Lin kt bng nhau.

SELECT P.ProductID,
S.SupplierID,
S.CompanyName
FROM Suppliers AS S, Products AS P
WHERE S.SupplierID = P.SupplierID
AND P.UnitPrice > $10
AND S.CompanyName LIKE N'F%'

i vi cu lnh truy vn theo iu kin lin kt ni trn, cc hng cha gi


tr Null ca ct tham gia lin kt s khng c lit k, cu lnh ny tng ng
vi lnh Inner Join (s xem trong phn sau).

+ Lin kt khng bng nhau.


Lin kt dng ny s dng cc php ton so snh >, >=, <, <=, <>, !>, !<

USE pubs
SELECT p.pub_name, p.state, a.au_lname, a.au_fname,
a.state
FROM publishers p, authors a
WHERE a.state > p.state and
p.pub_name = 'New Moon Books'
ORDER BY au_lname ASC, au_fname ASC

+ T lin kt bng nhau.


T lin kt trong mt bng, cu lnh dng ny thng c s dng trong
vic xc nh nhng cp gi tr no cc ct trong bng c quan h vi nhau theo
lin kt.

176
USE pubs
SELECT au1.au_fname, au1.au_lname, au2.au_fname,
au2.au_lname
FROM authors au1, authors au2
WHERE au1.zip = au2.zip and au1.city = 'Oakland'
ORDER BY au1.au_fname ASC, au1.au_lname ASC

+ T lin kt khng bng nhau.

USE pubs
SELECT au1.au_fname, au1.au_lname, au2.au_fname,
au2.au_lname
FROM authors au1, authors au2
WHERE au1.zip = au2.zip
AND au1.city = 'Oakland'
AND au1.state = 'CA'
AND au1.au_id < au2.au_id
ORDER BY au1.au_lname ASC, au1.au_fname ASC

+ Truy vn d liu t nhiu hn 2 bng d liu.


Truy vn dng ny thc hin iu kin lin kt theo tng cp cc bng vi
nhau.

USE pubs
SELECT a.au_lname, a.au_fname, t.title
FROM authors a, titleauthor ta, titles t
WHERE a.au_id = ta.au_id
AND ta.title_id = t.title_id
AND t.type = 'trad_cook'
ORDER BY t.title ASC
+ Lin kt ngoi tri.
Nh nhng iu kin lin kt ni trn, nhng hng c ct l Null s khng
c a ra tp kt qu, cu lnh lin kt ngoi s a ra nhng hng cha gi tr
Null ni trn. Xc nh lin kt ngoi bng ton t *.

USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
177
FROM authors a, publishers p
WHERE a.city *= p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

Bng authors s a ra c nhng hng c ct c ct city l Null, khi cha c


pub_name, kt qu nh sau:

au_fname au_lname pub_name


---------- ---------------- --------
Reginald Blotchet-Halls NULL
Michel DeFrance NULL
Innes del Castillo NULL
Ann Dull NULL
Marjorie Green NULL
Morningstar Greene NULL
Burt Gringlesby NULL
Sheryl Hunter NULL
Livia Karsen NULL
Charlene Locksley NULL
Stearns MacFeather NULL
Heather McBadden NULL
Michael O'Leary NULL
Sylvia Panteley NULL
Albert Ringer NULL
Anne Ringer NULL
Meander Smith NULL
Dean Straight NULL
Dirk Stringer NULL
Johnson White NULL
Akiko Yokomoto NULL
Abraham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems

(23 row(s) affected)

+ Lin kt ngoi phi.

USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors AS a, publishers AS p
WHERE a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

178
Kt qu thc hin:
au_fname au_lname pub_name
-------------------- ---------------------- --------------------
Abraham Bennet Algodata
Infosystems
Cheryl Carson Algodata
Infosystems
NULL NULL Binnet & Hardley
NULL NULL Five Lakes
Publishing
NULL NULL GGG&G
NULL NULL Lucerne Publishing
NULL NULL New Moon Books
NULL NULL Ramona Publishers
NULL NULL Scootney Books

(9 row(s) affected)

Lnh Join Truy vn t nhiu bng.


Phn trn ta xem xt k thut truy vn d liu t nhiu bng s dng iu
kin lin kt, tng t nh cc php ton so snh, *=, =* SQL Server cung cp cu
lnh Join thay th cc php ton ni trn.
+ Inner Join Lin kt trong.
Thay v xc nh iu kin lin kt trong mnh Where th y ta ch cn
xc nh lin kt trong mnh From.

Lin kt bng:

USE pubs
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
ORDER BY a.au_lname DESC

Lin kt khng bng:

USE pubs

179
SELECT p.pub_name, p.state, a.au_lname, a.au_fname,
a.state
FROM publishers p INNER JOIN authors a
ON a.state > p.state
WHERE p.pub_name = 'New Moon Books'
ORDER BY au_lname ASC, au_fname ASC

+ T lin kt trong bng.

T lin kt bng:

USE pubs
SELECT au1.au_fname, au1.au_lname, au2.au_fname,
au2.au_lname
FROM authors au1 INNER JOIN authors au2
ON au1.zip = au2.zip
WHERE au1.city = 'Oakland'
ORDER BY au1.au_fname ASC, au1.au_lname ASC

T lin kt khng bng:

USE pubs
SELECT au1.au_fname, au1.au_lname, au2.au_fname,
au2.au_lname
FROM authors au1 INNER JOIN authors au2
ON au1.zip = au2.zip
WHERE au1.city = 'Oakland'
AND au1.state = 'CA'
AND au1.au_id < au2.au_id
ORDER BY au1.au_lname ASC, au1.au_fname ASC

+ Lin kt nhiu hn 2 bng.

USE pubs
SELECT a.au_lname, a.au_fname, t.title
FROM authors a INNER JOIN titleauthor ta

180
ON a.au_id = ta.au_id JOIN titles t
ON ta.title_id = t.title_id
WHERE t.type = 'trad_cook'
ORDER BY t.title ASC

+ Lin kt ngoi tri - LEFT OUTER JOIN.


Lin kt ngoi tri tng t nh php ton *=.

USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a LEFT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

+ Lin kt ngoi phii RIGHT OUTER JOIN.


Lin kt ngoi phi tng t nh php ton =*.

USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a RIGHT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

+ Lin kt ngoi 2 pha FULL OUTER JOIN.


L php lin kt tri hoc phi.

USE pubs
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a FULL OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

Kt qu nh sau:

181
au_fname au_lname pub_name
--------------- ----------------------- -----------------
Reginald Blotchet-Halls NULL
Michel DeFrance NULL
Innes del Castillo NULL
Ann Dull NULL
Marjorie Green NULL
Morningstar Greene NULL
Burt Gringlesby NULL
Sheryl Hunter NULL
Livia Karsen NULL
Charlene Locksley NULL
Stearns MacFeather NULL
Heather McBadden NULL
Michael O'Leary NULL
Sylvia Panteley NULL
Albert Ringer NULL
Anne Ringer NULL
Meander Smith NULL
Dean Straight NULL
Dirk Stringer NULL
Johnson White NULL
Akiko Yokomoto NULL
Abraham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems
NULL NULL Binnet & Hardley
NULL NULL Five Lakes Publishing
NULL NULL GGG&G
NULL NULL Lucerne Publishing
NULL NULL New Moon Books
NULL NULL Ramona Publishers
NULL NULL Scootney Books

(30 row(s) affected)

+ Gi tr Null v php Join.


Gi tr Null khng xc nh trong php so snh ca mnh Where (ch s
dng vi cc php so snh Is Null hoc Is Not Null), trong php Join ta c th xc
nh ging nhau gia 2 gi tr Null. Xt v d sau:

Gi s c 2 bng d liu c gi tr nh sau:

182
table1 table2
a b c d
------- ------ ------- ------
1 one NULL two
NULL three 4 four
4 join4

Thc hin php Join nh sau:

SELECT *
FROM table1 t1 JOIN table2 t2
ON t1.a = t2.c
ORDER BY t1.a

Kt qu thc hin:

a b c d
----------- ------ ----------- ------
4 join4 4 four

(1 row(s) affected)

TRUY VN TNG HP.


Vic s dng cc hm tnh ton nh SUM, AVG, thng c thc hin
theo cc mnh WHERE, GROUP BY, HAVING. Khi xc nh iu kin c s
dng cc hm tnh ton th phi s dng mnh HAVING m khng c s
dng trong mnh WHERE.
Cc hm tnh ton c th tm tt nh sau:
SUM([ALL | DISTINCT]) Tnh tng tt c hoc nhng hng khc nhau.
AVG([ALL | DISTINCT]) Tnh trung bnh tt c hoc nhng hng khc nhau.
COUNT([ALL | DISTINCT]) m s hng tt c hoc nhng hng khc nhau.
COUNT(*) m cc hng c la chn.
MAX() Tnh gi tr ln nht.

183
MIN() Tnh gi tr nh nht.

Cc hm SUM, AVG ch lm vic vi d liu dng s, cc hm SUM, AVG,


COUNT, MAX, MIN b qua gi tr Null, hm COUNT(*) m c hng c gi tr
Null.

S dng hm tnh ton.


+ Tnh tng ton b.
USE pubs
SELECT SUM(ytd_sales)
FROM titles

+ Tnh tng, trung bnh c iu kin.

USE pubs
SELECT AVG(advance), SUM(ytd_sales)
FROM titles
WHERE type = 'business'

Mnh Group By.


Group by c thc hin nhm cc hng theo gi tr ct xc nh, cc hm
tnh ton s c thc hin theo nhm ni trn.

USE Northwind
SELECT OrdD.ProductID AS ProdID,
SUM(OrdD.Quantity) AS AmountSold
FROM [Order Details] AS OrdD JOIN Products as Prd
ON OrdD.ProductID = Prd.ProductID
AND Prd.CategoryID = 2
GROUP BY OrdD.ProductID

Kt qu thc hin nh sau:

184
ProdID AmountSold
----------- -----------
3 328
4 453
5 298
6 301
8 372
15 122
44 601
61 603
63 445
65 745
66 239
77 791

(12 row(s) affected)

Mnh Having.
Having c s dng cng vi cc hm tnh ton xc nh iu kin lc cc
hng, thng c kt hp cng mnh Group By thc hin cc hm tnh ton
theo nhm.
+ Having vi hm SUM.

USE pubs
SELECT pub_id, total = SUM(ytd_sales)
FROM titles
GROUP BY pub_id
HAVING SUM(ytd_sales) > 40000

+ Having vi hm Count.

USE pubs
SELECT pub_id, total = SUM(ytd_sales)
FROM titles
GROUP BY pub_id
HAVING COUNT(*) > 5

185
+ Having vi mnh Where.

SELECT pub_id, SUM(advance) AS AmountAdvanced,


AVG(price) AS AveragePrice
FROM pubs.dbo.titles
WHERE pub_id > '0800'
AND price >= $5
GROUP BY pub_id
HAVING SUM(advance) > $15000
AND AVG(price) < $20
ORDER BY pub_id DESC

+ Having thay cho mnh Where.

SELECT titles.pub_id, AVG(titles.price)


FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
GROUP BY titles.pub_id
HAVING publishers.state = 'CA'

TRUY VN LNG NHAU.


Phn ny s xem xt cc cu lnh truy vn lng nhau, trong cu lnh truy vn
Select c cu lnh truy vn Select khc trong iu kin xc nh ca lnh Select
ngoi. Thng thng cc cu lnh dng ny i cng cc t lha IN, NOT IN,
EXITST, NOT EXIST, ANY, ALL.
Truy vn lng nhau vi php bng.

USE pubs
SELECT title, price
FROM titles
WHERE price =
(SELECT price
FROM titles
WHERE title = 'Straight Talk About Computers')

186
u tin cu lnh s xc nh hng trong lnh Select trong, lnh truy vn ny phi
a ra kt qu duy nht.

Truy vn vi t kha IN.


Kim tra nm trong tp cc gi tr truy vn c.

USE pubs
SELECT distinct pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = 'business')

Hng s nm trong khong:

USE pubs
SELECT DISTINCT au_lname, au_fname
FROM authors
WHERE 100 IN
(SELECT royaltyper
FROM titleauthor
WHERE titleauthor.au_id = authors.au_id)

Truy vn vi t kha Exist.


Kim tra tn ti hng d liu truy vn c.

USE pubs
SELECT DISTINCT pub_name
FROM publishers
WHERE EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business')

187
Truy vn vi hm All.
Kim tra vi tt c cc hng.

USE pubs
SELECT t1.type
FROM titles t1
GROUP BY t1.type
HAVING MAX(t1.advance) >= ALL
(SELECT 2 * AVG(t2.advance)
FROM titles t2
WHERE t1.type = t2.type)

Truy vn vi hm Any.
Kim tra tha mn vi bt k hng no.

USE pubs
SELECT title
FROM titles
WHERE advance > ANY
(SELECT advance
FROM publishers INNER JOIN titles
ON titles.pub_id = publishers.pub_id
AND pub_name = 'Algodata Infosystems')

Truy vn vi hm Some.
Kim tra vi t nht mt hng.

USE pubs
SELECT t1.type
FROM titles t1
GROUP BY t1.type
HAVING MAX(t1.advance) >= SOME
(SELECT 2 * AVG(t2.advance)
FROM titles t2
WHERE t1.type = t2.type)

188
Nhiu lnh Select lng nhau.

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE au_id IN
(SELECT au_id
FROM titleauthor
WHERE title_id IN
(SELECT title_id
FROM titles
WHERE type = 'popular_comp'))

UPDATE, DELETE, INSERT VI LNH TRUY VN LNG NHAU.


Vic thc hin cc lnh thao tc vi d liu c th kt hp iu kin truy vn
lng nhau xc nh phm vi d liu c thao tc.

Kt hp vi lenh Select.

UPDATE titles
SET price = price * 2
WHERE pub_id IN
(SELECT pub_id
FROM publishers
WHERE pub_name = 'New Moon Books')

Kt hp vi lnh Join.

UPDATE titles
SET price = price * 2
FROM titles INNER JOIN publishers ON titles.pub_id =
publishers.pub_id
AND pub_name = 'New Moon Books'

189
Xa d liu kt hp vi lnh Select.

DELETE sales
WHERE title_id IN
(SELECT title_id
FROM titles
WHERE type = 'business')

Xa d liu vi php Join.

DELETE sales
FROM sales INNER JOIN titles ON sales.title_id =
titles.title_id
AND type = 'business'

LNH READTEXT C TEXT, IMAGE.


Lnh ReadText c thc hin c d liu kiu Text, Image v chuyn vo
mt bin.

USE pubs
GO
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr INNER JOIN publishers p
ON pr.pub_id = p.pub_id
AND p.pub_name = 'New Moon Books'
READTEXT pub_info.pr_info @ptrval 1 25
GO
V d trn thc hin c d liu t ct pr_info bt u t v tr 1, di 25
byte.
THAO TC D LIU NGOI.
Ni dung phn ny s gii thiu cu lnh, k thut truy vn d liu ca h
qun tr CSDL khc hoc Instance khc.
Lnh OpenRowSet.

190
Lnh OpenRowSet s dng truy nhp d liu xa vi ngun d liu l OLE
DB, kt ni kiu ny c th thc hin cc lnh Insert, Update, Delete, Select vi
bng d liu. Quyn thc hin trong cu lnh thc hin theo user kt ni trong cu
lnh.
+ OPENROWSET vi lnh SELECT v Microsoft OLE DB Provider for SQL
Server.
USE pubs
GO
SELECT a.*
FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass',
'SELECT * FROM pubs.dbo.authors ORDER BY au_lname,
au_fname') AS a
GO

V d trn thc hin kt ni n Instance c tn seattle1, user c tn sa, mt khu


MyPass.

+ OPENROWSET vi OLE DB Provider for ODBC.

USE pubs
GO
SELECT a.*
FROM OPENROWSET('MSDASQL',
'DRIVER={SQL
Server};SERVER=seattle1;UID=sa;PWD=MyPass',
pubs.dbo.authors) AS a
ORDER BY a.au_lname, a.au_fname
GO

+ Microsoft OLE DB Provider for Jet. Lnh dng ny c ny c thc hin kt


ni n Access.

USE pubs
GO
SELECT a.*
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

191
'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'myp
wd', Orders)
AS a
GO

+ OPENROWSET vi INNER JOIN mt bng khc.

USE pubs
GO
SELECT c.*, o.*
FROM Northwind.dbo.Customers AS c INNER JOIN
OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'myp
wd', Orders)
AS o
ON c.CustomerID = o.CustomerID
GO

Lnh OpenDataSource.
Lnh OpenDataSource thc hin m d liu ngoi Instance, khng cn n
linked_server.

+ Kt ni n Instance khc.

SELECT *
FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ServerName;User
ID=MyUID;Password=MyPass'
).Northwind.dbo.Categories

+ Kt ni n Excel.

192
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User
ID=Admin;Password=;Extended properties=Excel
5.0')...xactions

Lnh OpenQuery.
Lnh OpenQuery thc hin thao tc vi d liu ngoi thng qua
LinkedServer.

EXEC sp_addlinkedserver 'OracleSvr',


'Oracle 7.3',
'MSDAORA',
'ORCLDB'
GO
SELECT *
FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM
joe.titles')
GO

MT S HM C BN.
Hm h thng.
DB_ID Tr v ID ca CSDL khi bit tn.
DB_NAME Tr v tn CSDL khi bit ID.
HOST_ID Tr v ID ca my ch.
HOST_NAME Tr v tn my ch
SUSER_ID Tr v ID User ca Server khi bit tn
SUSER_NAME Tr v tn User ca Server khi bit ID.
USER_ID Tr v ID User khi bit tn
USER_NAME Tr v tn User khi bit ID

193
Hm thao tc vi chui.
+ SUBSTRING - Ly chui nh trong chui.
SUBSTRING ( expression , start , length )

S dng vi chui k t:

USE pubs
SELECT au_lname, SUBSTRING(au_fname, 1, 1)
FROM authors
ORDER BY au_lname

S dng vi text, ntext, image:

USE pubs
SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo,
SUBSTRING(pr_info, 1, 10) AS pr_info
FROM pub_info
WHERE pub_id = '1756'

+ CHARINDEX Tr v v tr bt u mt mu trong chui.

CHARINDEX ( expression1 , expression2 [ , start_location ] ) Tm v tr xut


hin chui expression1 trong expression2.

V d tm chui wonderful trong ct notes ca bng titles:

USE pubs
GO
SELECT CHARINDEX('wonderful', notes)
FROM titles
WHERE title_id = 'TC3218'
GO

194
+ PATINDEX Tr v v tr xut hin ca mu trong chui.

PATINDEX ( '%pattern%' , expression )

V d trm v tr xut hin mu %wonderful%:

USE pubs
GO
SELECT PATINDEX('%wonderful%', notes)
FROM titles
WHERE title_id = 'TC3218'
GO

V d trm v tr xut hin mu %won_erful%:

USE pubs
GO
SELECT PATINDEX('%won_erful%', notes)
FROM titles
WHERE title_id = 'TC3218'
GO

+ STR Chuyn d liu kiu s sng chui.

STR ( float_expression [ , length [ , decimal ] ] )

V d chuyn s sang chui c di 6, lm trn sau du phy 1 s.

SELECT STR(123.45, 6, 1)
GO
Kt qu l chui 123.5

V d s dng vi hm Floor ly gi tr nguyn nh hn ca mt s thc:

195
SELECT STR (FLOOR (123.45), 8, 3)
GO
Kt qu l 123.000

+ STUFF Chn mt chui vo mt chui khc.


Hm Stuff thc hin xa chui nh trong mt chui sau thc hin chn
mt chui mi vo v tr bt u.
STUFF ( character_expression , start , length , character_expression )

V d:

SELECT STUFF('abcdef', 2, 3, 'ijklmn')


GO

Kt qu thc hin:
aijklmnef

+ SOUNDEX Tr v hm pht m.
Hm Soundex s dng so snh pht m gia 2 chui, v d sau s cho 2 m
Soundex nh nhau:

SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')


Kt qu thc hin:
S530 S530

+ Defference So snh gi tr hm Soundex gia 2 chui: Gi tr tr v t 0 n 4,


4 l gi tr ging nhau nht. V d sau so snh gia 2 chui:

SELECT DIFFERENCE('Smithers', 'Smythers')


GO
Kt qu thc hin: 4

196
SELECT DIFFERENCE('Anothers', 'Brothers')
GO
Kt qu thc hin: 2
+ UNICODE Ly m unicode k t u tin trong chui.
+ NCHAR Chuyn m unicode thnh k t.

Cc hm DateTime.
+ GETDATE: Tr v ngy, gi hin ti.
+ DATEPART: Tr v gi tr ngay hoc thng hoc nm ca mt biu thc ngy.
DATEPART ( datepart , date )

Gi tr datepart theo bng sau:

Datepart Dng rt gn
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
weekday dw
hour hh
minute mi, n
second ss, s
millisecond ms

SELECT DATEPART(m, 0), DATEPART(d, 0), DATEPART(yy, 0)

+ SET DATFIRST: t ngy u tin trong tun.


+ SET DATEFORMAT: t nh dng kiu DateTime nhp d liu.

197
SET DATEFORMAT mdy
GO
DECLARE @datevar datetime
SET @datevar = '12/31/98'
SELECT @datevar
GO

+ DAY, MONTH, YEAR: Ly gi tr ngy, thng, nm.


+ ISDATE: Kim tra xem d liu c hp l DateTime khng.
+ DATEDIFF: Xc nh lch gia 2 gi tr DateTime.

DATEDIFF ( datepart , startdate , enddate )

V d: Xc nh s ngy pht hnh sch.

USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO

+ DATEADD Xc nh gi DateTime mi khi thay i mt khong thi gian.

DATEADD ( datepart , number, date )

USE pubs
GO
SELECT DATEADD(day, 21, pubdate) AS timeframe
FROM titles
GO

Cc hm chuyn i.
+ CONVERT
+ CAST

198
TRANSACTION PHIN GIAO DCH.
Transaction l mt n v cng vic trong n bao gm nhiu vic nh, cc
vic ny c thc hin thnh cng th Transaction thnh cng, d liu thay i
trong qu trnh thc hin ca Transaction s c cp nht. Nu trong qu trnh c
pht sinh li th Transaction s lp li (Roll Back hoc Cancel), d liu khng c
cp nht. Mt phin giao dch c 4 c tnh ACID (Atomicity, Consistency,
Isolation, Durability).
Atomicity Nguyn t: Mt phin giao dch l mt n v cng vic nh nht, tt c
d liu thay i trong phin giao dch c thc hin hoc tt c khng c thc
hin.
Consistency- Nht qun: Giao dch s khng thc hin nu c mt thao tc xung
khc v mt logic hoc quan h. Tnh nht qun rt quan trng vi m hnh ng
dng client/server, vi m hnh dng ny ti mt thi im c th c nhiu giao
dch thc hin ng thi, nu mt giao dch no khng nht qun th tt c cc
giao dch khc s thc hin sai, dn n s vi phm ton vn d liu.
Isolation Tch bit: Ti mt thi im c nhiu phin giao dch ng thi, cc
phin giao dch ch tc ng vi nhau khi d liu c cp nht (kt thc phin).
Gi s c 2 phin giao dch c tc ng
Durability - Bn vng: Sau khi giao dch hon tt, d liu trng thi bn vng.

Mt phin giao dch c xc nh bt u, kt thc:

Bt u phin giao dch.


Phin giao dch c 3 loi: explicit transaction, implicit transaction,
autocommit transaction.
Explicit transaction: L kiu phin giao dch r, c bt u bng lnh BEGIN
TRANSACTION, i vi phin giao dch phn tn th c bt u bng lnh
BEGIN DISTRIBUTED TRAN
[ transaction_name | @tran_name_variable ]

t tn giao dch:

199
DECLARE @TranName VARCHAR(20)
SELECT @TranName = 'MyTransaction'

BEGIN TRANSACTION @TranName


GO
USE pubs
GO
UPDATE roysched
SET royalty = royalty * 1.10
WHERE title_id LIKE 'Pc%'
GO

COMMIT TRANSACTION MyTransaction


GO

nh du trong giao dch:

BEGIN TRANSACTION RoyaltyUpdate


WITH MARK 'Update royalty values'
GO
USE pubs
GO
UPDATE roysched
SET royalty = royalty * 1.10
WHERE title_id LIKE 'Pc%'
GO
COMMIT TRANSACTION RoyaltyUpdate
GO

Autocommit transaction: Mi cu lnh t cp nht d liu khi n kt thc, khng


cn cu lnh iu khin phin giao dch.

Implicit transaction: L phin giao dch n, t ch ny thng qua hm API


hoc lnh SET IMPLICIT_TRANSACTIONS ON. Khi phin giao dch kt thc,
cu lnh T-SQL tip theo s khi ng phin giao dch mi.

SET IMPLICIT_TRANSACTIONS { ON | OFF }

200
S dng kt hp vi Implicit transaction:

USE pubs
GO

CREATE table t1 (a int)


GO
INSERT INTO t1 VALUES (1)
GO

PRINT 'Use explicit transaction'


BEGIN TRAN
INSERT INTO t1 VALUES (2)
SELECT 'Tran count in transaction'= @@TRANCOUNT
COMMIT TRAN
SELECT 'Tran count outside transaction'= @@TRANCOUNT
GO

PRINT 'Setting IMPLICIT_TRANSACTIONS ON'


GO
SET IMPLICIT_TRANSACTIONS ON
GO

PRINT 'Use implicit transactions'


GO
-- No BEGIN TRAN needed here.
INSERT INTO t1 VALUES (4)
SELECT 'Tran count in transaction'= @@TRANCOUNT
COMMIT TRAN
SELECT 'Tran count outside transaction'= @@TRANCOUNT
GO

PRINT 'Use explicit transactions with


IMPLICIT_TRANSACTIONS ON'
GO
BEGIN TRAN
INSERT INTO t1 VALUES (5)
SELECT 'Tran count in transaction'= @@TRANCOUNT
COMMIT TRAN
SELECT 'Tran count outside transaction'= @@TRANCOUNT
GO

201
SELECT * FROM t1
GO

-- Need to commit this tran too!


DROP TABLE t1
COMMIT TRAN
GO

Kt thc phin giao dch.


S dng lnh Commit trong phin giao dch.

COMMIT [ TRAN [ SACTION ] [ transaction_name | @tran_name_variable ] ]

+ Commit mt phin giao dch.

BEGIN TRANSACTION
USE pubs
GO
UPDATE titles
SET advance = advance * 1.25
WHERE ytd_sales > 8000
GO
COMMIT
GO

+ Commit nhiu phin giao dch lng nhau.

CREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3))


GO
BEGIN TRANSACTION OuterTran -- @@TRANCOUNT set to 1.
GO
INSERT INTO TestTran VALUES (1, 'aaa')
GO
BEGIN TRANSACTION Inner1 -- @@TRANCOUNT set to 2.
GO
INSERT INTO TestTran VALUES (2, 'bbb')
GO
BEGIN TRANSACTION Inner2 -- @@TRANCOUNT set to 3.
GO

202
INSERT INTO TestTran VALUES (3, 'ccc')
GO
COMMIT TRANSACTION Inner2 -- Decrements @@TRANCOUNT to 2.
-- Nothing committed.
GO
COMMIT TRANSACTION Inner1 -- Decrements @@TRANCOUNT to 1.
-- Nothing committed.
GO
COMMIT TRANSACTION OuterTran -- Decrements @@TRANCOUNT to 0.
-- Commits outer transaction OuterTran.
GO

Hy b v quay li phin giao dch.


S dng lnh RollBack Transaction hy b nhng thc hin v quay li
phin giao dch.

ROLLBACK [ TRAN [ SACTION ]


[ transaction_name | @tran_name_variable
| savepoint_name | @savepoint_variable ] ]

LOCK KHA.

Khi 2 hay nhiu ngi cng truy nhp ng thi mt CSDL, SQL Server s
dng kho xc nh hot ng cho mt ngi v khng xc didnhj cho ngi
khc. Kho l vic ngn khng cho nhng ngi c d liu m khng b ngi
khc s i.

Hu ht SQL Server u kho t ng, bn c th thit tit CSDL mt cch


c hiu qu hn bng vic tm hiu v kho v chn kho cho ng dng ca bn.

Tm hiu v kho.

Kho gm cc loi sau:

Kiu kho M t
Shared L kho khng lm thay i, ghi d liu, dng cho lnh Select
Update Kho hoc cho php sa i d liu
Exclusive Kho vi cc thao tc Update, Insert, Delete

Mt s phm vi kho nh sau:

203
Tn M t
Page Trang d liu 2K hoc trang ch mc Index, thng c dng
Extent Nhm cc trang c kch thc 8k, ch dng vi trng hp xc
nh
Table C bng d liu, gm d liu v index
Intent L kiu c bit t kiu kho ca trang hin ti trn bng

Bng xc nh hiu lc ca cc kiu kho

Shared Update Exclusive


Shared Yes Yes No
Update Yes No No
Exclusive No No No

V d: Khi t ch kho l Exclusive th nhng phin giao dch khc khng th


yu cu bt c loi kho no n khi ho Exclusive b b.

Xem thng tin v kho.

xem thng tin v kho ng s dng trong SQL Server ta lm nh sau:

Chn i tng cn xem kho


Thc hin th tc sp_lock

Chn kiu kho.

Kho oc t trong cc cu lnh nh: SELECT, INSERT, UPDATE, v DELETE


, sau y l bng m t cc kiu kho i vi phng thc ni trn

Tn M t
NOLOCK c s dng vi c lnh Select, ngi oc c th c d liu
khi d liu gc khi cha c ghi d liu mi trong giao dch
ang s dng
HOLDLOCK Khoa Shared c gi n khi phin giao dch c hon tt khi
kho cha c gii phng
UPDLOCK Dng cp nht d liu ca kiu kho Shared trong qu trnh
c bng d liu v c gi n khi kt thc lnh ca phin
giao dch. Khoa ny dng khi cp nht d liu, ngn khng cho
ngi khc c n khi phin giao dch cp nht c hon tt
TABLOCK Dng kho Shared trn mt bng d liu, cho php nhng ngi
khc c d liu nhng ngn khng cho cp nht
PAGELOCK s dng kiu kho Shared phm vi trang d liu (Page), y l
204
loi kho ngm nh
TABLOCKX Dng kiu kho Exlusive trn mt bng d liu, ngn ngi
khc c v cp nht d liu t bng v gi n khi kt thc
lnh, phin giao dch

Cch t kho nh sau: Dng lnh SET


V d 1:

USE pubs
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
SELECT au_lname FROM authors WITH (NOLOCK)
GO
V d? 2:
Select * from authors(UPDLOCK)
t mc kho.

Dng t, iu khin kho trong cc giao dch ca SQL Server

C php:

SET TRANSACTION ISOLATION LEVEL


{ READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}

Trong :

o Read Committed: Dng kiu kho Shared trong qu trnh c d liu


o Read Uncommitted: Khng t kho Shared v kho Exclusive, c th
c d liu gc khi ang c phin giao ch sa i d liu
o RepeateTable Read: Kho tt c d liu ang c s dng trong truy
vn, ngn nhng ngi khc sa d liu nhng ngi khc c th chn
thm d liu mi vo bng (hng mi)
o Serializable: t kho trong mt tp d liu (kho phm vi) ngn
khng cho ngi khc c th sa, thm hng mi vo tp d liu n
khi giao dch kt thc, tng nh HoldLock trong lnh Select
V d:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

205
GO
BEGIN TRANSACTION
SELECT * FROM publishers
SELECT * FROM authors
...
COMMIT TRANSACTION
Kho cht (DeadLock).

Trong h qun tr CSDL quan h ni rieneg v cc h qun tr khc ni


chung, vic xut hin nhiu lung d liu ng thi trong CSDL l thng xuyn
xy ra, mt giao dch c th ly d liu t nhiu ngun d liu khc nhau, hai giao
dch trong cng CSDL c th cng chung mt ngun d liu no nn vic cc
giao dch ny t cc mc kho khc nhau cho cc ngun d liu m no nm gi l
khng th trnh khi, v d tn s sau m t s giao cho v ngun d liu trong
giao dch

Trong giao dch 1 v 2 u t cc bng d liu mc kho Exlusive, nh


vy giao dch 1 ch thc hin c khi giao dch 2 thc hin xong hoc quay li
trng thi ban u, ngc li giao dch 2 cng cho giao dch 1 thc hin xong
hoc quay li trng thai ban u. C nh vy th c 2 giao dch s khng bao gi
kt thc c phin giao dch ca mnh. Phn chung ca kho ni trn gi l kho
cht, v c kho theo khi (block).

GRAND GN QUYN.
Lnh Grand thc hin gn quyn cho user hoc role ca SQL Server. Ngi
thc hin Grand phi c quyn c thc hin phn quyn cho user. C 2 hnh
thc gn quyn: gn quyn thc hin cu lnh, gn quyn thao tc vi i tng.
Gn quyn thao tc cu lnh.

206
GRANT { ALL | statement [ ,...n ] }
TO security_account [ ,...n ]

Cc cu lnh:

CREATE DATABASE

CREATE DEFAULT

CREATE FUNCTION

CREATE PROCEDURE

CREATE RULE

CREATE TABLE

CREATE VIEW

BACKUP DATABASE

BACKUP LOG

SQL Server ngm nh mt s nhm c quyn thc hin cu lnh nh sau:

dbcreator processadmin securityadmin serveradmin bulkadmin


ALTER X
DATABASE
CREATE X
DATABASE
BULK INSERT X
DBCC X (1)
DENY X (2)
GRANT X (2)
KILL X
RECONFIGURE X
RESTORE X
REVOKE X (2)
SHUTDOWN X

207
db_ db_
db_ db_ db_ db_ backup security
owner datareader datawriter ddladmin operator admin
ALTER DATABASE X X
ALTER FUNCTION X X
ALTER PROCEDURE X X
ALTER TABLE X (1) X
ALTER TRIGGER X X
ALTER VIEW X (1) X
BACKUP X X
CHECKPOINT X X
CREATE DEFAULT X X
CREATE FUNCTION X X
CREATE INDEX X (1) X
CREATE PROCEDURE X X
CREATE RULE X X
CREATE TABLE X X
CREATE TRIGGER X (1) X
CREATE VIEW X X
DBCC X X (2)
DELETE X (1) X
DENY X X
DENY on object X
DROP X (1) X
EXECUTE X (1)
GRANT X X
GRANT on object X (1)
INSERT X (1) X
READTEXT X (1) X
REFERENCES X (1) X
RESTORE X
REVOKE X X
REVOKE on object X (1)

208
SELECT X (1) X
SETUSER X
TRUNCATE TABLE X (1) X
UPDATE X (1) X
UPDATE STATISTICS X (1)
UPDATETEXT X (1) X
WRITETEXT X (1) X

Cc user c gn quyn c th l user ca SQL Server hoc user ca Windows


NT.
V d gn quyn thao tc cu lnh cho 3 user (trong c 2 user ca SQL Server
v 1 user ca Windows NT):

GRANT CREATE DATABASE, CREATE TABLE


TO Mary, John, [Corporate\BobJ]

V d gn quyn thao tc cho role v user:

USE pubs
GO

GRANT SELECT
ON authors
TO public
GO

GRANT INSERT, UPDATE, DELETE


ON authors
TO Mary, John, Tom
GO

Gn quyn thao tc i tng.


L vic gn quyn cho cc user hoc role c quyn thao tc vi cc i
tng ca SQL Server.
V d gn quyn thao tc cho Role:

209
GRANT CREATE TABLE TO Accounting

V d gn quyn gn quyn thao tc cho user khc: V d Jean l dbo ca bng


Plan_data, Jean thc hin gn quyn vi chc nng GRAND_OPTION cho role
accounting, Jill thuc role ni trn v Jill gn quyn c Select cho Jack, Jack
khng l thnh vin ca Accounting.

/* User Jean */
GRANT SELECT ON Plan_Data TO Accounting WITH GRANT
OPTION

/* User Jill */
GRANT SELECT ON Plan_Data TO Jack AS Accounting

Th cc sp_grandlogin.
L th tc thc hin gn quyn truy nhp cho user ca Windows NT hoc
nhm user ca Windows NT.

sp_grantlogin [@loginame =] 'login'

V d gn quyn truy nhp SQL Server cho BobJ.

EXEC sp_grantlogin 'Corporate\BobJ'

Th tc sp_grandaccess.
Gn quyn khai thc cho user ca SQL Server hoc Windows NT.

sp_grantdbaccess [@loginame =] 'login'


[,[@name_in_db =] 'name_in_db' [OUTPUT]]

V d gn quyn khai thc cho user ca Windows v ly theo tn mi.

210
EXEC sp_grantdbaccess 'Corporate\GeorgeW', 'Georgie'

REVOKE TC QUYN.
Revoke l cu lnh tc quyn khai thc ca user.
Tc quyn c thc hin cu lnh.

REVOKE { ALL | statement [ ,...n ] }


FROM security_account [ ,...n ]

V d tc quyn khai thc vi 2 user:

REVOKE CREATE TABLE FROM Joe, [Corporate\BobJ]

V d tc quyn khai thc 2 cu lnh vi cc user:

REVOKE CREATE TABLE, CREATE DEFAULT


FROM Mary, John

Tc quyn khai thc ca user vi i tng.


V d tc quyn thc hin lnh Select trong role Budget_data i vi Mary:

REVOKE SELECT ON Budget_Data TO Mary

DENY T CHI QUYN.


L cu lnh t chi quyn i vi user, user ch thc hin c quyn khi c
ch nh r rng.
V d t chi quyn thc hin lnh vi cc user:

DENY CREATE DATABASE, CREATE TABLE


TO Mary, John, [Corporate\BobJ]

211
V d gn quyn khai thc cho role, sau thc hin t chi thc hin ca cc user
trong role:

USE pubs
GO

GRANT SELECT
ON authors
TO public
GO

DENY SELECT, INSERT, UPDATE, DELETE


ON authors
TO Mary, John, Tom

V d t chi quyn ca role:

DENY CREATE TABLE TO Accounting

TR GIP.
Trong qu trnh thc hin son lnh T-SQL bn c th thc hin tra cu lnh
trong Book Online.

212
Phn 3. PHT TRIN NG DNG VI
SQL SERVER

Trong phn ny ta s xem xt k thut pht trin ng dng vi SQL Server


t cc ngn ng lp trnh (Visual Basic, C++, VBScript,). Cc ng dng khai
thc CSDL ca SQL Server thc hin cc bc sau:
+ Kt ni t ng dng n SQL Server.
+ Xy dng c s d liu.
+ Thc hin cc lnh khai thc hoc th tc ca SQL Server.
+ Khai thc d liu thng qua cng c c sn.
+ Ngt kt ni.

GII THIU.
Thit k ng dng l vic thc hin to giao din (API Application
Program Interface) giao tip vi SQL Server, vic thc hin kt ni thc hin thng
qua cc cng c ADO, URL, OLE DB, ODBC, Embedded SQL for C, DB-Library.
Khi s dng cc cng c kt ni d liu thao tc di dng bng hoc dng ti liu
XML.
+ D liu di dng bng c thc hin thng qua cc cng c kt ni
ADO, OLE DB, ODBC, Embedded SQL for C, DB-Library.
+ D liu thc hin thng qua ti liu XML thng qua cc cng c ADO,
URL, OLE DB.

KT NI VI SQL SERVER BNG ADO.


ADO vit tt ca cm t ActiveX Data Object l cng c giao tip vi d
liu ca nhiu h qun tr CSDL khc nhau, SQL Server l mt v d cho vic giao
tip.
ADO s dng vi CSDL quan h hoc s dng vi CSDL a chiu, khi
gi l ADO MD (ADO Multi Dimention). ADO s dng kt ni kiu OLE DB
hoc cc th vin kt ni COM (Component Object Model).

213
OLE DB s dng 2 phng thc Microsoft OLE DB Provider for SQL
Server (SQLOLEDB) v Microsoft OLE DB Provider for ODBC (MSDASQL).
ADO c th thc hin t cc ngn ng lp trnh Visual Basic, ASP, C++.
Cu trc ng dng s dng ADO.
ADO gm cc thnh phn c bn sau: Application, ADO, OLE DB
Provider, Data Source.

Thnh phn Chc nng


Application Gi cc i tng, thnh phn, phng thc v cc thuc tnh
ca ADO. Thng qua cc thnh phn ny ng dng s gi cc
cu lnh SQL v nhn kt qu x l.
ADO Qun l vic trao i d liu gia ng dng v OLE DB
OLE DB X l cc lnh gi t ng dng qua ADO, kt ni vi Data
provider Source.
Processes all ADO calls from the application, connects to a
data source, passes SQL statements from the application to the
data source, and returns results to the application.
Data source Contains the information used by a provider to access a
specific instance of data in a DBMS.
Khi thc hin lp trnh ng dng vi SQL Server s dng ADO, ngi lp
trnh phi thc hin cc thao tc sau:
+ Kt ni n ngun d liu (data source).
+ Gi cu lnh SQL n ngun d liu.
+ X l kt qu nhn c t cu lnh gi.
+ X l cc li v thng bo.
+ Ngt kt ni n ngun d liu.
i vi mt s ng dng phc tp s dng ADO c th s dng mt s thao
tc sau:
+ S dng con tr (cursor) iu khin v tr trong tp kt qu.
+ Thc hin th tc lu tr trn Server.
+ Thc hin hm t nh ngha trn Server.
+ Qun l cc php truy vn m c nhiu tp kt qu.

214
+ Yu cu kt thc hoc lp li mt phin giao dch.
+ Qun l cc thao tc vi kiu d liu ln (text, image).
+ Thc hin cc thao tc vi XML s dng php truy vn XPath.

Kt ni n SQL Server.
kt ni n SQL Server, cc cng vic c bn cn thc hin nh sau:

+ Cu hnh kt ni.

+ Thit lp hoc ngt kt ni n ngun d liu.

+ Xc nh OLE DB provider.

+ Thc hin truy vn.

+ Qun l cc phin lm vic trn kt ni.

Khi s dng SQLOLEDB ta phi thc hin t cc thuc tnh sau cho kt
ni:

+ Initial Catalog: Xc nh CSDL.

+ Data Source: Xc nh tn Server.

+ Integrated Security: Xc nh ch xc thc, nu l SSPI ch xc


thc l Windows Authentication, hoc xc nh User ID, Password ca ch
xc thc SQL Server Authentication.

V d thc hin kt ni n SQL Server t tng thuc tnh ting bit t Visual
Basic:

' Initialize variables.


Dim cn As New ADODB.Connection
. . .
Dim ServerName As String, DatabaseName As String, _
UserName As String, Password As String

' Put text box values into connection variables.


ServerName = txtServerName.Text
DatabaseName = txtDatabaseName.Text

215
UserName = txtUserName.Text
Password = txtPassword.Text

' Specify the OLE DB provider.


cn.Provider = "sqloledb"

' Set SQLOLEDB connection properties.


cn.Properties("Data Source").Value = ServerName
cn.Properties("Initial Catalog").Value = DatabaseName

' Decision code for login authorization type:


' Windows NT or SQL Server authentication.
If optWinNTAuth.Value = True Then
cn.Properties("Integrated Security").Value = "SSPI"
Else
cn.Properties("User ID").Value = UserName
cn.Properties("Password").Value = Password
End If

' Open the database.


cn.Open

V d kt ni n SQL Server s dng chui kt ni:

' Initialize variables.


Dim cn As New ADODB.Connection
Dim provStr As String

' Specify the OLE DB provider.


cn.Provider = "sqloledb"

' Specify connection string on Open method.


ProvStr =
"Server=MyServer;Database=northwind;Trusted_Connection=
yes"
cn.Open provStr

V d kt ni s dng ODBC:

216
Dim cn As New ADODB.Connection

cn.ConnectionTimeout = 100
' DSN connection. You can use variables for the
parameters.
cn.Open "MyDataSource", "sa", "MyPassword"
' Alternative syntax follows:
' cn.Open "DSN=DataSourceName;UID=sa;PWD=Password;"

cn.Close

V d kt ni xc nh Driver ca SQL Server:

Dim cn As New ADODB.Connection

' Connection to SQL Server without using ODBC data


source.
cn.Open "Driver={SQL
Server};Server=Server1;Uid=SA;Pwd=;Database=northwind"

cn.Close

Thc hin truy vn.

Thc hin truy vn s dng i tng Command.

cmd.Execute(NumRecords, Parameters, Options)

i tng Command c th thc hin nhiu kiu cu lnh (Select, Update,


Insert, Delete, Create, Drop), i vi lnh Select kt qu thc hin l mt recordset.

Set rs = cmd.Execute(NumRecords, Parameters, Options)

Kiu lnh thc hin trong Command c xc nh theo option ca lnh,


gm mt s kiu sau:

Tn kiu M t
adCmdFile Tn file cha i tng recordset

217
adCmdStoreProc Stored procedure
adCmdTable Tn bng
adCmdTableDirect Tn bng m cc ct c truy vn
adCmdText Cu lnh SQL
adCmdUnknown Cha xc nh
adCmdUnspecified Cha xc nh tham s cho lnh

Thc hin truy vn thng qua i tng connection.

Dim cn As New ADODB.Connection


. . .
Dim rs As New ADODB.Recordset

cmd1 = txtQuery.Text
Set rs = cn.Execute(cmd1)

Thc hin truy vn c s dng tham s.

Khi thc hin cc th tc c tham s truyn vo cc ng dng phi truyn


tham s, trong phn ny s gii thiu mt v d s dng i tng parameter.

To th tc:

USE NORTHWIND
GO
drop proc myADOParaProc
GO
CREATE PROC myADOParaProc
@categoryid int(4)
AS
SELECT * FROM products WHERE categoryid = @categoryid
GO

S dng i tng parameter truyn tham s l s nguyn xc nh categoryID:

Dim cn As New ADODB.Connection


Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
Dim prm As ADODB.Parameter

218
Dim fld As ADODB.Field
Dim provStr As String

' Connect using the SQLOLEDB provider.


cn.Provider = "sqloledb"

' Specify connection string on Open method.


provStr =
"Server=MyServer;Database=northwind;Trusted_Connection=yes"
cn.Open provStr

' Set up a command object for the stored procedure.


Set cmd.ActiveConnection = cn
cmd.CommandText = "myADOParaProc"
cmd.CommandType = adCmdStoredProc
cmd.CommandTimeout = 15

' Set up a new parameter for the stored procedure.


Set prm = Cmd.CreateParameter("CategoryID", adInteger,
adParamInput, 4, 7)
Cmd.Parameters.Append prm

' Create a recordset by executing the command.


Set rs = cmd.Execute
Set Flds = rs.Fields

' Print the values for all rows in the result set.
While (Not rs.EOF)
For Each fld in Flds
Debug.Print fld.Value
Next
Debug.Print ""
rs.MoveNext
Wend

' Close recordset and connection.


rs.Close

cn.Close

i tng Recordset.

S dng i tng Recordset lu tr kt qu ca lnh Select.

219
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
. . .
cmd1 = txtQuery.Text
Set rs = New ADODB.Recordset
rs.Open cmd1, cn
rs.MoveFirst
. . .
' Code to loop through result set(s)

i tng Field.

S dng i tng field l cc ct ca Recordset, thng qua n ta c th ly


gi tr, thuc tnh ca ct.

Dim rs As New ADODB.Recordset


Dim fld As ADODB.Field
Dim cn As ADODB.Connection
Dim cmdText As String

cn.Provider = "sqloledb"
cn.Properties("Data Source").Value = "MyServerName"
cn.Properties("Initial Catalog").Value = "northwind"
cn.Properties("Integrated Security").Value = "SSPI"
cn.Open

cmdText = "select * from authors"

rs.Open cmdText, cn
Set Flds = rs.Fields
Dim TotalCount As Integer
TotalCount = Flds.Count

For Each fld In Flds


Debug.Print fld.Name
Debug.Print fld.Type
Debug.Print fld.Value
Next
rs.Close
S dng con tr.

220
Khi s dng i tng Recordset ca ADO, ta c th s dng nhiu kiu con
tr khc nhau xc nh kiu kha, iu khin v tr,...

Dim rs As New ADODB.Recordset


. . .
rs.Open "SELECT * FROM titles", , adOpenDynamic,
adLockOptimistic

rs.Close

COn tr ni trn gm nhng thuc tnh c bn sau: CursorType, CursorLocation,


LockType, CacheSize.

Thuc tnh M t
CursorType - adOpenForwardOnly: Ngm nh
Xc nh kiu con tr c s dng:
- adOpenForwardOnly: Ch c, ch c th cp nht d liu
trn hng d liu hin thi.
- adOpenStatic: Trng thi tnh, khi m kiu ny h thng s
cung cp mt nh d liu (snapshot), d liu thay i trn
bng c s s khng c th hin trn snapshot dng ny.
- adOpenKeyset: Theo v tr ty chn, khi di chuyn hng
cp nht con tr kiu ny s chiu n hng d liu c s,
hng d liu c kh v bn c th cp nht, ly d liu t
hng c s.
- adOpenDynamic: ng, con tr kiu ny gn ging keyset
cursor , nhng con tr kiu ny phn nh nhng thay i trn
bng c s.
CursorLocation -adUseServer: Ngm nh.
- adUseClient: Nu t l ta ch c th m trng thi tnh.
LockType -adLockReadOnly: Ngm nh.
Xc nh kiu kha trong qu trnh cp nht d liu
(adLockPessimistic, adLockOptimistic,
adLockBatchOptimistic).
CacheSize Ngm nh: 1
Xc nh s hng t trong b m hoc c trong mt thi
im.

Cc phng thc dch chuyn hng d liu.

221
Khi s dng i tng Recordset bn c th dch chuyn v tr ca hng d
liu bng cc phng thc MoveFirst, MoveLast, MoveNext, MovePrevious.
nh du v tr theo phng thc Bookmark, phng thc clone to mt bn
sao recordset.

Qun l phin lm vic.

Trong phn cu lnh T-SQL ta xem xt vic iu khin mt hpin lm


vic (transaction), tuy nhin ta c th s dng i tng connection ca ADO
iu khin trc tip phin lm vic nh trong kch bn lnh ni trn bng vic s
dng cc phng thc BeginTrans, CommitTrans, RollbackTrans. Xt v d
sau:

Dim cn As New ADODB.Connection


Dim rs As New ADODB.Recordset

. . .
' Open connection.
cn.Open

' Open titles table.


rs.Open "SELECT * FROM titles", Cn, adOpenDynamic,
adLockPessimistic
. . .
' Begin the transaction.
rs.MoveFirst
cn.BeginTrans

' User loops through the recordset making changes.


. . .
' Ask if the user wants to commit all the changes made.
If MsgBox("Save all changes?", vbYesNo) = vbYes Then
cn.CommitTrans
Else
cn.RollbackTrans
End If
Thc hin cc lnh DDL.

thc hin cc lnh DDL nh CREATE TABLE, DROP TABLE,


ALTER TABLE. Bn c th s dng i tng command ca ADO, xt v d sau:

Dim Cn As New ADODB.Connection

222
Dim Cmd As New ADODB.Command

' If the ADOTestTable does not exist, go to AdoError.


On Error GoTo AdoError

' Connect using the SQLOLEDB provider.


cn.Provider = "sqloledb"
cn.Properties("Data Source").Value = "MyServerName"
cn.Properties("Initial Catalog").Value = "northwind"
cn.Properties("Integrated Security").Value = "SSPI"
cn.Open

' Set up command object.


Set Cmd.ActiveConnection = Cn
Cmd.CommandText = "DROP TABLE ADOTestTable"
Cmd.CommandType = adCmdText
Cmd.Execute

Done:
Cmd.CommandText = "SET NOCOUNT ON"
Cmd.Execute
Cmd.CommandText = "CREATE TABLE ADOTestTable (id
int, name char(100))"
Cmd.Execute
Cmd.CommandText = "INSERT INTO ADOTestTable
values(1, 'Jane Doe')"
Cmd.Execute
Cn.Close
Exit Sub

AdoError:
Dim errLoop As Error
Dim strError As String

' Enumerate Errors collection and display


properties of
' each Error object.
Set Errs1 = Cn.Errors
For Each errLoop In Errs1
Debug.Print errLoop.SQLState
Debug.Print errLoop.NativeError
Debug.Print errLoop.Description

223
Next

GoTo Done

End Sub
Qun l d liu kiu ln Text, image.

D liu kiu text, ntext, image l kiu d liu phc tp, vic qun l, khai
thc khng c thc hin thng thng, ADO h tr cc phng thc ring
thc hin.

Thay v c, cp nht d liu trc tip th d liu kiu ny c thao tc theo


on (chunk) bng cch s dng cc phng thc AppendChunk, GetChunk.

Trc khi thc hin bn phi t tham s bng cch thc hin lnh sau:

EXEC sp_dboption 'pubs', 'Select into/bulkcopy', 'True'

Xt v d sau trn CSDL Pubs:

- Copy bng pub_info sang bng mi

USE pubs
SELECT * INTO pub_info_x
FROM pub_info
GO

- Thc hin chn d liu vo bng:

Public Sub AppendChunkX()

Dim cn As ADODB.Connection
Dim rstPubInfo As ADODB.Recordset
Dim strCn As String
Dim strPubID As String
Dim strPRInfo As String
Dim lngOffset As Long
Dim lngLogoSize As Long
Dim varLogo As Variant
Dim varChunk As Variant

Const conChunkSize = 100

224
' Open a connection.
Set cn = New ADODB.Connection
strCn = "Server=srv;Database=pubs;UID=sa;Pwd=;"

cn.Provider = "sqloledb"
cn.Open strCn

'Open the pub_info_x table.


Set rstPubInfo = New ADODB.Recordset
rstPubInfo.CursorType = adOpenDynamic
rstPubInfo.LockType = adLockOptimistic
rstPubInfo.Open "pub_info_x", cn, , , adCmdTable

'Prompt for a logo to copy.


strMsg = "Available logos are : " & vbCr & vbCr

Do While Not rstPubInfo.EOF


strMsg = strMsg & rstPubInfo!pub_id & vbCr & _
Left(rstPubInfo!pr_info,
InStr(rstPubInfo!pr_info, ",") - 1) & vbCr &
vbCr
rstPubInfo.MoveNext
Loop

strMsg = strMsg & "Enter the ID of a logo to copy:"


strPubID = InputBox(strMsg)

' Copy the logo to a variable in chunks.


rstPubInfo.Filter = "pub_id = '" & strPubID & "'"
lngLogoSize = rstPubInfo!logo.ActualSize
Do While lngOffset < lngLogoSize
varChunk = rstPubInfo!logo.GetChunk(conChunkSize)
varLogo = varLogo & varChunk
lngOffset = lngOffset + conChunkSize
Loop

' Get data from the user.


strPubID = Trim(InputBox("Enter a new pub ID:"))
strPRInfo = Trim(InputBox("Enter descriptive
text:"))

225
' Add a new record, copying the logo in chunks.
rstPubInfo.AddNew
rstPubInfo!pub_id = strPubID
rstPubInfo!pr_info = strPRInfo
lngOffset = 0 ' Reset offset.

Do While lngOffset < lngLogoSize


varChunk = LeftB(RightB(varLogo, lngLogoSize - _
lngOffset),conChunkSize)
rstPubInfo!logo.AppendChunk varChunk
lngOffset = lngOffset + conChunkSize
Loop

rstPubInfo.Update

' Show the newly added data.


MsgBox "New record: " & rstPubInfo!pub_id & vbCr & _
"Description: " & rstPubInfo!pr_info & vbCr & _
"Logo size: " & rstPubInfo!logo.ActualSize

rstPubInfo.Close
cn.Close

End Sub

Kt ni t ASP.
Trong c v d saiu y thc hin lm vic vi SQL Server t ASP, s dng
ngn ng lp trnh VBScript, lm c v d ny bn c phi c kin thc v
thit k Web site (HTML).
Thit k form kt ni:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<html>
<head>
<title>Login SQL Server example</title>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8">
<style type="text/css">
<!--

226
.style1 {
font-size: 24px;
font-weight: bold;
}
-->
</style>
</head>

<body>
<p align="center" class="style1">Login SQL Server</p>
<p>&nbsp;</p>
<form name="frmlogin">
<table width="100%" border="0">
<tr>
<td width="40%"><div align="right">User name
</div></td>
<td width="60%">
<input name="txtUser" type="text" id="txtUser">
</td>
</tr>
<tr>
<td><div align="right">Password </div></td>
<td><input name="txtPassword" type="password"
id="txtPassword"></td>
</tr>
<tr>
<td><div align="right">Server name </div></td>
<td><input name="txtServer" type="text"
id="txtServer"></td>
</tr>
</table>
<div align="center">
<input name="cmdLogin" type="button" id="cmdLogin"
value="Login">
&nbsp;&nbsp;
<input type="reset" name="cmdReset" value="Reset">
</div>
</form>
</body>
</html>
<Script language=vbscript>
sub cmdLogin_Onclick

227
frmlogin.method="post"
frmlogin.action="connect.asp"
frmlogin.submit
end sub
</script>

Tp tin connect.asp: L tp tin c gi t form login.asp, thc hin nhn tham s


ca form login.asp, kt ni n SQL Server.

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%
dim username, password, servername, txt
username=request.Form("txtUser")
password = request.Form("txtPassword")
servername=request.Form("txtServer")
txt= "Provider=SQLOLEDB; "
txt=txt & " Data Source=" & servername & ";"
txt=txt & " Initial Catalog=pubs; "
txt=txt & " User ID=" & username & ";"
txt=txt & " PWD=" & password

228
Set cn=Server.CreateObject("ADODB.Connection")
cn.Open txt
%>
<div align="center"><span class="style1">K&#7871;t
n&#7889;i th&agrave;nh c&ocirc;ng</span>
<%
cn.close
%>
<br>
<a href="Login.asp<< V&#7873; form login</a>
</div>

Lit k danh sch.


lit k danh sch (c th ly d liu bng cch truy vn trc tip hoc
thng qua khung nhn - view) trc ht phi to mt recordset lu tr kt qu truy
vn, t recordset ta c th ly d liu v t vo v tr tng ng cn thit.
+ Khai bo Recordset:
Set rs=Server.CreateObject("ADODB.Recordset")
rs.ActiveConnection =cn

229
rs.Source ="Select * from Authors"
rs.Open
+ Ly gi tr:
Rs.fields(au_id)

+ ng Recordset:
Rs.close

+ V d lit k danh sch bng cch truy vn trc tip:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<html>
<head>
<title>Danh sach</title>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8">
<style type="text/css">
<!--
.style5 {
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
font-size: 14px;
}
.style6 {font-family: Arial, Helvetica, sans-serif}
.style7 {
font-size: 14px;
font-weight: bold;
}
.style9 {font-family: Arial, Helvetica, sans-serif;
font-size: 14px; }
.style12 {font-size: 12px}
-->
</style>
</head>
<%
dim username, password, servername, txt
username="sa"

230
password = ""
servername="TDCong"
txt= "Provider=SQLOLEDB; "
txt=txt & " Data Source=" & servername & ";"
txt=txt & " Initial Catalog=pubs; "
txt=txt & " User ID=" & username & ";"
txt=txt & " PWD=" & password
Set cn=Server.CreateObject("ADODB.Connection")
cn.Open txt

Set rs=Server.CreateObject("ADODB.Recordset")
rs.ActiveConnection =cn
rs.Source ="Select * from Authors"
rs.Open
%>
<body>
<p align="center"><strong>LIST OF AUTHORS
</strong></p>
<p>&nbsp;</p>
<table width="100%" border="0.2">
<tr bgcolor="#999999">
<td width="5%"><div align="center"
class="style5">No</div></td>
<td width="14%"><div align="center" class="style6
style7">au_id</div></td>
<td width="14%"><div align="center"
class="style9"><strong>au_lname</strong></div></td>
<td width="14%"><div align="center"
class="style9"><strong>au_fname</strong></div></td>
<td width="14%"><div align="center"
class="style9"><strong>phone</strong></div></td>
<td width="26%"><div align="center"
class="style9"><strong>address</strong></div></td>
<td width="13%"><div align="center"
class="style9"><strong>city</strong></div></td>
</tr>
<%
i=0
do while not rs.eof and not rs.bof
i=i+1
if i mod 2<>0 then
%>

231
<tr bgcolor="#FFFFFF">
<td><div align="center"><span
class="style12"><%=i%></span></div></td>
<td><div align="center"><span
class="style12"><%=rs.fields("au_id")%></span></div></t
d>
<td><span
class="style12"><%=rs.fields("au_fname")%></span></td>
<td><span
class="style12"><%=rs.fields("au_lname")%></span></td>
<td><span
class="style12"><%=rs.fields("Phone")%></span></td>
<td><span
class="style12"><%=rs.fields("Address")%></span></td>
<td><span
class="style12"><%=rs.fields("City")%></span></td>
</tr>
<%
else
%>
<tr bgcolor="#CCCCCC">
<td><div align="center"><span
class="style12"><%=i%></span></div></td>
<td><div align="center"><span
class="style12"><%=rs.fields("au_id")%></span></div></t
d>
<td><span
class="style12"><%=rs.fields("au_lname")%></span></td>
<td><span
class="style12"><%=rs.fields("au_fname")%></span></td>
<td><span
class="style12"><%=rs.fields("Phone")%></span></td>
<td><span
class="style12"><%=rs.fields("Address")%></span></td>
<td><span
class="style12"><%=rs.fields("City")%></span></td>
</tr>
<%
end if
rs.movenext
loop
%>

232
</table>
</body>
<%
rs.close
%>
</html>

KT NI VI SQL SERVER BNG SQL-DMO.

SQL DMO vit tt ca cm t SQL Distributed Management Objects, s


dng th vin lin kt ng (dll) kt ni n SQL Server.

SQL DMO thc hin lin kt nhng (OLE Automation ), cc i tng SQL
Server c thc hin nhng cc i tng ca SQL Server vo ng dng, khai
thc cc i tng thng qua thuc tnh, s kin v cc phng thc lm vic ca
n.

233
SQL DMO h tr pht trin ng dng t ngn ng lp trnh Visual Basic,
C++, khi ng gi cc th vin lin kt ng s c ng gi cng, ci dt ng
dng th vin s c ci t trong Windows, nn khi chy ng dng bn khng
cn thit lp mi trng Client Connectivity.

Cc tp tin c bn cho SQL DMO: sqldmo.dll, sqldmo80.hlp, sqldmo.rll,


sqldmo.h (C++), sqldmoid.h (C++), sqldmo.sql. Trong phn ny s gii thiu k
thut thit k ng dng t Visual Basic 6.0.
Khai bo th vin trong project.
- Vo menu Project -> References
- Chn Microsoft SQL DMO Object Library -> Ok

Khai bo i tng.
Sau khi thc hin khai bo th vin trong project, ta c th khai bo bin
kiu i tng (object) hoc kiu i tng ca SQL DMO.

V d khai bo bin kiu SQL Server:

Dim oSQLServer As SQLDMO.SQLServer

Kt ni n SQL Server.

234
kt ni n SQL Server ta s dng phng thc kt ni ca i tng
SQL Server, c 3 tham s Servername, LoginName, Pasword.

Dim oSQLServer As SQLDMO.SQLServer


Set oSQLServer = New SQLDMO.SQLServer
oSQLServer.Connect "ServerName", "LoginName",
"Pasword"

Thc hin li kt ni:


Trong nhiu trng hp bn mun ngt kt ni hin ti v thc hin li kt
ni ly trng thi SQL Server hin thi (tng t ng tc lm ti Reresh).

oSQLServer.DisConnect

oSQLServer.ReConnect

Lm vic vi cc i tng.
SQL DMO to i tng k tha t nhng i tng con ca n, v d SQL
Server k tha t cc i tng Database <- Table <- Column,

Xc nh bin vi CSDL:

Dim oDatabase as new SQLDMO.Database


Set oDatabase = oSQLServer.Databases("Northwind")

Ly danh sch tn cc CSDL vo hp thoi:

Dim nDatabase as Integer


For nDatabase = 1 to oSQLServer.Databases.Count
Combo1.AddItem oSQLServer.Databases(nDatabase).Name
Next nDatabase

Cc i tng u c k th t cc i tng con, cc i tng con to


thnh mt tp hp, tp hp ni trn c th thc hin cc phng thc Add,
Remove,vi tng i tng.

V d remove bng khi CSDL:


oServer.Databases("Northwind").Tables.Remove("Orders",
"anne")

Thc hin lnh SQL:


235
Cc i tng (SQL Server, Database) c th thc hin cc lnh SQL thng
qua cc phng thc ExecuteImmediate v ExecuteWithResults.

V d thc hin lnh thao tc:

oSQLServer.ExecuteImmediate Create Database Example

V d thc hin lnh truy vn:

Dim rs As QueryResults
Set rs = oDatabase.ExecuteWithResults("Select *
from Authors")

V d ly d liu t mt truy vn:

For i = 1 To rs.Rows
For j = 1 To rs.Columns
MsgBox rs.GetColumnString(i, j)
Next j
Next i

Cc phng thc thc hin kt ni c th h tr theo tng ngn ng lp


trnh, h tr nhiu trong vic lp trnh t Visual Basic, ASP, C, C++. Bn c th
tham kho cc v d trong th mc Sample ca SQL Server. Cc v d s cp
nhiu ngn ng lp trnh, nhiu s kin khc nhau.

236

You might also like