Professional Documents
Culture Documents
HeQTCSDLSQLSERVER PDF
HeQTCSDLSQLSERVER PDF
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
MC LC..................................................................................................................................................................... 1
M U ....................................................................................................................................................................... 4
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
3
Phn 1. QUN TR SQL SERVER
BT U VI SQL SERVER
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).
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.
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:
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.
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:
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.
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)
14
- Chn SQL Server Components.
15
- 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.
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
18
Trong cch la chn Custom ta cn thm bc chn cc chc nng nh sau:
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.
20
- n next tip tc.
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.
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.
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.
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.
28
- Di chuyn vo mc trong bng cch nhn vo du + ca cy cc i tng.
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
31
- Nhp tn Server.
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.
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.
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
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.
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
40
- Nhn Finish.
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).
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:
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
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).
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:
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.
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.
- Nhp tn CSDL.
51
- Xc nh tn logic, tn vt l, tn nhm ca tp tin v cc tham s khc.
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
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
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.
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'
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
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:
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.
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().
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.
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.
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).
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.
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.
73
- Nhp d liu theo ng quy cch kiu d liu, rng buc nu c.
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
Go
76
KHA INDEX
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.
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
TO KHUNG NHN.
S dng cng c.
- Chn chc nng Views ca CSDL.
82
- Nhn phi chut.
83
- Son lnh truy vn hoc nh du cc ct tham gia to View.
S DNG VIEW.
- Chn View
- Nhn nt phi chut.
84
Thc hin cc chc nng tng t table.
85
TH TC LU TR
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'
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
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%'
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
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)))
Title Name
-------------------------------------------------------
The Busy Executive's Database Guide
The Gourmet Microwave
The Psychology of Computer Cooking
(3 row(s) affected)
OPEN @titles_cursor
GO
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
94
GO
Khi s dng th tc h thng sp_helptext xem ni dung th tc:
Kt qu nh sau:
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
95
TRIGGER
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...
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.
c th hn ta xt mt s v d sau:
98
V d to mt trigger thng bo.
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.
101
XUT NHP D LIU
102
- Chn bng User DSN -> Add
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.
- 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.
- 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'
Xa Linked Server.
- S dng cng c: Chn Linked Server cn xa -> thc hin xa.
- S dng lnh :
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]"]
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.
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 ]
)
]
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 (...)
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
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
117
- Chn chc nng thc hin ngy hay theo lch > Next -> Finish
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
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.
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
123
- Chn mc Databases -> Nhn nt phi chut -> All Tasks -> Restore
Database
124
PHN QUYN, BO MT
CH BO MT SECURITY MODE.
Nh gp trong phn ci t SQL Server, SQL Server c 2 ch bo mt:
Windows Authentication.
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).
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.
t ch .
126
- Chn ch bo mt -> Ok
Server Role.
127
+ System Administrators: Qun tr h thng SQL Server.
Xem c th nh sau:
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.
- 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.
To theo cu lnh.
S dng cu lnh
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...
131
[ , [ @sid = ] sid ]
[ , [ @encryptopt = ] 'encryption_option' ]
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
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:
134
- Publisher v Subscriber c thit lp trn mt my:
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:
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.
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.
139
- t tn CSDL ca Distribution.
140
- Chn CSDL tham gia nhn bn, kiu nhn bn.
- 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)
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.
144
- Chn lch thc hin ng b d liu.
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.
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.
V d:
sp_addtype ssn, varchar(11), NOT NULL
V d:
Sp_droptype ssn
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)
)
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
153
+ Chn d liu vo cc ct khng theo th t.
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
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
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'
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)
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
UPDATE authors
SET state = 'ZZ'
FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname)
AS t1
WHERE authors.au_id = t1.au_id
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).
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
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
OPEN authors_cursor
160
WHILE @@FETCH_STATUS = 0
BEGIN
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
OPEN authors_cursor
161
-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM authors_cursor
CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
USE pubs
DELETE authors
+ Xa mt tp cc hng.
USE pubs
DELETE FROM authors
WHERE au_lname = 'McBadden'
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%'
DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id
163
USE pubs
GO
DECLARE @MyMsg VARCHAR(50)
SELECT @MyMsg = 'Hello, World.'
GO -- @MyMsg is not valid after this GO ends the batch.
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
USE Northwind
GO
SELECT *
FROM Shippers
GO
USE Northwind
GO
SELECT *
FROM Shippers
ORDER BY CompanyName DESC
GO
165
USE Northwind
GO
SELECT OrderID, ProductID, UnitPrice, Quantity,
Discount
FROM [Order Details]
ORDER BY OrderID ASC
GO
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
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
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
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
t tn cho ct.
S dng du phy xc nh tn ct, ti a l 30 k t.
Cc gi tr tnh ton c.
i cc kiu d liu tnh ton c s dng cc php ton +, -, *, /, %.
SET TEXTSIZE 25
168
SELECT pub_id, pr_info FROM pub_info
USE pubs
SELECT DISTINCT au_id
FROM titleauthor
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:
169
FROM Northwind.dbo.Products
WHERE UnitsInStock BETWEEN 15 AND 25
ORDER BY UnitsInStock
USE pubs
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:
USE pubs
GO
SELECT phone
FROM authors
WHERE phone LIKE '415%'
ORDER by au_lname
GO
USE pubs
GO
SELECT phone
FROM authors
WHERE phone NOT LIKE '415%'
ORDER BY au_lname
GO
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
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.
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.
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
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:
Kt qu thc hin:
ColumnA ColumnB
------- --------
abc 1
def 2
ghi 3
jkl 4
174
mno 5
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
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%'
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
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
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
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
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)
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
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 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
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
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
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
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
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
182
table1 table2
a b c d
------- ------ ------- ------
1 one NULL two
NULL three 4 four
4 join4
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)
183
MIN() Tnh gi tr nh nht.
USE pubs
SELECT AVG(advance), SUM(ytd_sales)
FROM titles
WHERE type = 'business'
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
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
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.
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.
USE pubs
SELECT distinct pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = 'business')
USE pubs
SELECT DISTINCT au_lname, au_fname
FROM authors
WHERE 100 IN
(SELECT royaltyper
FROM titleauthor
WHERE titleauthor.au_id = authors.au_id)
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'))
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')
DELETE sales
FROM sales INNER JOIN titles ON sales.title_id =
titles.title_id
AND type = 'business'
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
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
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
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.
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
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'
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.
USE pubs
GO
SELECT PATINDEX('%wonderful%', notes)
FROM titles
WHERE title_id = 'TC3218'
GO
USE pubs
GO
SELECT PATINDEX('%won_erful%', notes)
FROM titles
WHERE title_id = 'TC3218'
GO
SELECT STR(123.45, 6, 1)
GO
Kt qu l chui 123.5
195
SELECT STR (FLOOR (123.45), 8, 3)
GO
Kt qu l 123.000
V d:
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:
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 )
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
197
SET DATEFORMAT mdy
GO
DECLARE @datevar datetime
SET @datevar = '12/31/98'
SELECT @datevar
GO
USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO
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.
t tn giao dch:
199
DECLARE @TranName VARCHAR(20)
SELECT @TranName = 'MyTransaction'
200
S dng kt hp vi Implicit transaction:
USE pubs
GO
201
SELECT * FROM t1
GO
BEGIN TRANSACTION
USE pubs
GO
UPDATE titles
SET advance = advance * 1.25
WHERE ytd_sales > 8000
GO
COMMIT
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
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.
Tm hiu v kho.
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
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
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
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.
C php:
Trong :
205
GO
BEGIN TRANSACTION
SELECT * FROM publishers
SELECT * FROM authors
...
COMMIT TRANSACTION
Kho cht (DeadLock).
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
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
USE pubs
GO
GRANT SELECT
ON authors
TO public
GO
209
GRANT CREATE TABLE TO 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.
Th tc sp_grandaccess.
Gn quyn khai thc cho user ca SQL Server hoc Windows NT.
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.
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
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
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.
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.
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.
+ Xc nh OLE DB provider.
Khi s dng SQLOLEDB ta phi thc hin t cc thuc tnh sau cho kt
ni:
V d thc hin kt ni n SQL Server t tng thuc tnh ting bit t Visual
Basic:
215
UserName = txtUserName.Text
Password = txtPassword.Text
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
cn.Close
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
cmd1 = txtQuery.Text
Set rs = cn.Execute(cmd1)
To th tc:
USE NORTHWIND
GO
drop proc myADOParaProc
GO
CREATE PROC myADOParaProc
@categoryid int(4)
AS
SELECT * FROM products WHERE categoryid = @categoryid
GO
218
Dim fld As ADODB.Field
Dim provStr As String
' 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
cn.Close
i tng Recordset.
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.
cn.Provider = "sqloledb"
cn.Properties("Data Source").Value = "MyServerName"
cn.Properties("Initial Catalog").Value = "northwind"
cn.Properties("Integrated Security").Value = "SSPI"
cn.Open
rs.Open cmdText, cn
Set Flds = rs.Fields
Dim TotalCount As Integer
TotalCount = Flds.Count
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,...
rs.Close
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.
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.
. . .
' Open connection.
cn.Open
222
Dim Cmd As New ADODB.Command
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
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.
Trc khi thc hin bn phi t tham s bng cch thc hin lnh sau:
USE pubs
SELECT * INTO pub_info_x
FROM pub_info
GO
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
224
' Open a connection.
Set cn = New ADODB.Connection
strCn = "Server=srv;Database=pubs;UID=sa;Pwd=;"
cn.Provider = "sqloledb"
cn.Open strCn
225
' Add a new record, copying the logo in chunks.
rstPubInfo.AddNew
rstPubInfo!pub_id = strPubID
rstPubInfo!pr_info = strPRInfo
lngOffset = 0 ' Reset offset.
rstPubInfo.Update
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> </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">
<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>
<%@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ết
nối thành công</span>
<%
cn.close
%>
<br>
<a href="Login.asp<< Về form login</a>
</div>
229
rs.Source ="Select * from Authors"
rs.Open
+ Ly gi tr:
Rs.fields(au_id)
+ ng Recordset:
Rs.close
<%@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> </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>
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.
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.
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.
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 rs As QueryResults
Set rs = oDatabase.ExecuteWithResults("Select *
from Authors")
For i = 1 To rs.Rows
For j = 1 To rs.Columns
MsgBox rs.GetColumnString(i, j)
Next j
Next i
236