You are on page 1of 55

Lp trnh SQL Server

- 1 -
CHNG 1: TNG QUAN V SQL SERVER V CSDL QUAN H
I- GII THIU SQL SERVER
SQL l mt h thng qun tr CSDLQH (RDBMS) nhiu ngi dng kiu
Client/Server. y l h thng c bn dng lu tr d liu cho hu ht cc ng dng ln hin
nay.
ng dng kiu Client/Server:
Mt ng dng kiu Client/Server bao gm 2 phn: Mt phn chy trn Server(my
ch) v phn khc chy trn cc workstations (my trm).

Phn Server: cha cc CSDL, cung cp cc chc nng phc v cho vic t chc v
qun l CSDL, cho php nhiu ngi s dng cng truy cp d liu. iu ny
khng ch tit kim m cn th hin tnh nht qun v mt d liu. Tt c d liu
u c truy xut thng qua server, khng c truy xut trc tip. Do , c
bo mt cao, tnh nng chu li, chy ng thi, sao lu d phng
Phn Client (ng dng khch): L cc phn mm chy trn my trm cho php ngi
s dng giao tip CSDL trn Server.
SQL Server s dng ngn ng lp trnh v truy vn CSDL Transact-SQL, mt version
ca Structured Query Language. Vi Transact-SQL, bn c th truy xut d liu, cp nht v
qun l h thng CSDL quan h.
Vi mi My ch bn ch c mt h thng QTCSDL SQL Server. Nu mun c nhiu
h thng QTCSDL bn cn c nhiu my ch tng ng.
Cc phin bn SQL Server 2000 :
a) Phin bn chun (Standard Edition): l phin bn cung cp ton b chc nng v
c thit k nhm chy trn my tnh vi HH Windows NT hoc Windows 2000
Server.
b) Phin bn Personal Engine: Chy trn my n vi HH Windows NT; Windows
2000 Server v c Windows 9x. N h tr hu ht cc tnh nng ca SQL Server.
Do , bn c th xy dng CSDL vi phin bn ny, sau trin khai trn cc
phin bn khc.
Ngoi ra cn cc phin bn khc chy trn Window NT hoc 2000 Server nh :
Enterprise Edition: dng cho x nghip
Developer Edition : dng cho cc doanh nghip nh
Desktop Engine
Lp trnh SQL Server
- 2 -
II- Cc Thnh Phn Ca Mt CSDL Trong SQL Server :
Mi CSDL c cc i tng sau:
1- Tables :
Table l i tng chnh ca CSDL dng lu tr d liu cn qun l. Mi table c 1
hay nhiu Field. Mi Field ng vi mt loi d liu cn lu tr.
Table cn c cc thnh phn lin quan nh :
a) Constraint Rng but:
Constraint l cc ch nh rng but d liu trong bng hoc cc bng khc nhau
theo mt quy tc no .
b) Triggers By Li:
Trigger thng cha cc m lnh kim tra d liu, c tnh nng t ng thc
hin khi c hnh ng no xy ra i vi d liu trong Table nh Insert, Update,
Delete.
c) Indexs Ch mc :
H tr cho vic sp xp v tm kim nhanh thng tin trn table.
2- Diagram S quan h:
Th hin mi quan h d liu gia cc table.
3- Views Khung nhn hay table o:
L i tng dng hin th d liu c rt trch, tnh ton t cc Table theo nhu cu
ca ngi dng.
4- Stored Procedure Th tc ni:
Cha cc lnh T-SQL dng thc hin mt s tc v no . Stored Proc c th nhn v
truyn tham s. Stored Proc c bin dch trc, do thi gian thc hin nhanh khi c
gi. C nhiu Stored Proc h thng c nh ngha vi tin t sp_ c nhim v thu thp
thng tin t cc bng h thng v rt c ch cho vic qun tr.
5- User Defined Function :
Hm do ngi dng nh ngha
6- Users :
Cha danh sch User s dng CSDL. Ngi qun tr h thng cao nht c User Name
l dbo, tn ng nhp (Login Name) h thng mc nh l sa. Ti khon sa lun tn ti v
khng th b i. thay i mt khu ca sa, cch nhanh nht l:
M trnh Query Analyzer
Thc hin th tc h thng : EXEC SP_PASSWORD NULL, <NewPass>
7- Roles :
Cc qui nh vai tr v chc nng ca User trong h thng SQL Server
8- Rules :
Cc qui tc rng buc d liu c lu tr trn Table
9- Defaults :
Cc khai bo gi tr mc nh
10- User Defined Data Type :
Kiu d liu do ngi dng t nh ngha
11- Full Text Catalogs :
Tp phn loi d liu Text.
III- CC CSDL H THNG CA SQL SERVER:
Lp trnh SQL Server
- 3 -
Sau khi ci t, SQL Server c 4 CSDL h thng v 2 CSDL v d sau:
1- Master: l CSDL kim sot tt c cc hot ng trn SQL Server, cha thng tin v
h thng SQL Server : Cc ti khon ng nhp, cu hnh h thng, thng tin v cc
CSDL to, cc th tc h thng thc hin cc tc v qun tr h thng, cc th
tc ca ngi dng to thm
V d: khi User to CSDL mi, thm hay xa Stored Procedure, cc thng tin
ny u c lu tr trong CSDL master.
Ch : Cn Backup CSDL Master mi khi bn sa i h thng.
2- Model : Cha cc template dng lm mu to CSDL mi. Khi bn to CSDL th
SQL Server ly tt c cc mu (bao gm Tables, Views,) t CSDL ny.
3- MSDB: dng h tr dch v SQL Server Agent, bao gm sp xp thng tin v cc
cng vic theo lch biu, cc cnh bo li, cc s kin, nhn bn. Lch s v cc
hot ng Backup u c lu trong CSDL ny.
V d: Khi bn to mt lch trnh cho vic backup d liu hay lch trnh thc
hin Stored Procedure, tt c cc tc v ny u lu trong CSDL ny.
Nu xa CSDL ny, bn phi ci t li n khi cn dng hoc khi h thng yu
cu.
4- Tempdb: l ni lu tr cc thng tin tm thi ca cc hot ng trn SQL, v d
nh cc table tm phc v cho vic sp xp d liu. CSDL tempdb t khi to li
mi khi SQL Server c khi ng li.
5- Pubs: l CSDL mu v mt nh xut bn, bao gm cc tc gi, cc cun sch, v
thng tin v vic bn sch. Hu ht cc tnh nng CSDL u c th hin trong
CSDL ny.
6- NorthWind: L CSDL h tr cho vic hc tp SQL Server i vi nhng ngi s
dng MS Access
IV- Cc Cng C Ca SQL Server:
SS cha cc cng c h tr cho vic qun l v truy cp CSDL :
1- Service Manager: Cc dch v ca SQL Server:
y l trnh qun l cc dch v trn SQL Server nh: MSSQL Server, SQL Server
Agent, Microsoft Distrinuted Transaction Coordinator (MS DTC).
MSSQL Server : l RDBMS, x l cc pht biu Transact-SQLv qun l cc file lu
tr cc CSDL
SQL Server Agent : dng lp lch thc hin t ng cc cng vic nh Backup d liu,
Replication,
Microsoft Distributed Transaction Coordinator (MSDTC): H tr cho cc ng dng
Client lm vic vi cc d liu c phn b trn nhiu my ch.
Lp trnh SQL Server
- 4 -


Combo Server: Cha danh sch cc SQL Server c
kh nng truy xut t my ca bn. Tuy nhin, bn c
th g tn my ch cn kt ni khng c trong danh
sch v click nt mi tn trn hp Services, Tin ch
Services Manager s c gng kt ni ti my ch
xa.
Combo Services: Cha tn cc dch v c cung
cp bi SQL Server chn.
Mi dch v s 1 trong 3 trng thi. Mt s
dch v khng cung cp chc nng tm dng.
V d MSSQLServer vn tip tc hot ng
khi n tm dng, nhng cc kt ni mi th khng
c php.
2- Trnh Enterprise Manager:
Enterprise Manager cung cp cc chc nng pht trin v qun tr SS bng giao din
ha. Cc tnh nng ca EM:
To, xa, cp nht
CSDL v cc i
tng ca n.
Qun l lch trnh
Backup d liu
Qun l ngi
dng ang truy
cp CSDL trn
SS.
To, xa cp nht
quyn Login User
nh cu hnh cho
Server
To v qun l
tm kim.


Lp trnh SQL Server
- 5 -
Databases : cha cc CSDL c ci t trn my ch.
Data Transform Service (DTS) : Cung cp phng tin chuyn i d liu t
nhiu ngun khc nhau vo SQL Server hoc t SQL Server sang cc ngun
khc. N cng c giao din cho php lp trnh xy dng nhng gi dch v
chuyn i d liu.
Management: Cho php bn thc hin cc tc v qun tr CSDL, xem nht k
hot ng ca Server, qun l SQL Server Agent.
Replication: cho php phn b d liu v cc i tng Database t mt CSDL
n mt database n mt database khc. Typically, replication is used between
physically distributed servers.
Security : cha cc chc nng iu khin tt c cc hot ng lin quan n vic
bo mt ca SQL Server.
Support Services: cho php iu khin cc dch v khc c quan h vi SQL
Server nh : Distributed Transaction Coordinator, Full Text Search v SQL Mail
cho php nhn e-mail t SQL Server.
Metadata Services enables you to manage metadata, or data about data.
3- Cng C Lp Trnh - Query Analyzer (ISQLW):
L giao din chnh chy cc truy vn Transact-SQL hoc th tc lu tr.
Khi khi ng Query Analyzer s xut hin hp thoi Connection to SQL Server:
Combo SQL Server: chn tn my ch
cha SQL Server hoc bn c th nhp
(local) hay du . kt ni vi bn
SQL Server cc b. Bn cng c th
trng tn my ch, Query Analyzer s
hiu v kt ni vi SQL Server ca bn.
Check Box Start SQL Server if stopped
yu cu SQL Server t khi ng, nu
SQL Server cha c khi ng.
Bn cn cung cp thng tin kt ni:
Nu ang lm vic trn my Windows 9x,
bn ch c th dng ty chn Use SQL
Server authentication vi Login Name l
sa.

Nu ang lm vic trn my Windows NT hay ang kt ni vi SQL Server chy trn
Windows NT, bn c th chn Option Use Windows NT authentication hay Use SQL
Server authentication kt ni ty thuc vo cch ci t ch c bo mt ca ngi
qun tr SQL Server.
Nu kt ni SS thnh cng, s hin th mn hnh lm vic ca QA.
Lp trnh SQL Server
- 6 -

QA cho php thc hin 32 kt ni ring r cng mt lc. Mi kt ni c mt thanh tiu
nhn dng cc yu t sau:
My tnh c ng nhp
CSDL ang s dng
Thng tin ng nhp
Tn File truy vn ang m
S ca ca s c hin th
Query Analyzer Icons
Use this To do this

M ca s truy vn mi

M mt file truy vn (.sql)

Lu cc lnh vo file.

M mt file truy vn mu

Xa ni dung ca s

Cch hin th kt qu truy vn: Result to text, result to grid, result to file.

Kim tra c php.

Thc hin truy vn.

Kt thc truy vn.

Hin th s nh gi tc thc hin truy vn.

Hin n khung lit k cc i tng CSDL (Objects Browser)

M hp thoi khai bo thuc tnh kt ni.

Hin n khung cha kt qu truy vn
Lp trnh SQL Server
- 7 -
Bn c th chn CSDL cn truy cp t DB Conmbo box trn thanh cng c hoc c th
s dng lnh: Use <database name> .
Transact-SQL Script l tp hp cc lnh c lu tr v thi hnh cng lc. Lnh
File\Open v File\Save cho php m v lu mt truy vn (hoc tp hp cc truy
vn). Theo mc nh, cc Sript c phn m rng l .SQL.
HighLight t kha bng chut v n Shift-F1 m phn tr gip lin quan.
Bn c th chy mt lnh trong ca s Query bng cch Highlight cu lnh bng
chut v sau cho thi hnh.
4- Tin ch mng Client / Server Network:
Cung cp cc th vin nghi thc kt ni mng (Netword-Libraries) cho php cc my
trm c th truy cp CSDL trn my Server: Named Pipes; TCP/IP; Multiprotocol; NW Link
IPX/SPX
5- Books Online:
Sch hng dn trc tuyn c lu di dng HTML c bin dch, nn c th
xem chng bng cc trnh duyt Web.
V- Tnh Bo Mt Trn SQL Server :
SQL Server kim tra User 2 mc :
o Mc ng nhp vo SQL Server
o Mc s dng cc i tng trn SQL Server.
1- Mc ng nhp vo SQL Server :
kt ni vi SS, ngi s dng phi c mt ti khon ng nhp(Login Account)
c cung cp bi ngi qun tr h thng.
Khi SQL Server chy trn Windows NT, Ngi Qun tr h thng c th ch nh n
chy 1 trong 2 ch xc nhn :
a- Ch xc nhn Windows NT (Windows NT Authentication Mode):
Khi User ch cn s dng ti khon ng nhp ca Windows NT truy cp vo mng
l c th kt ni ti SS v cc ti nguyn khc trn mng. Ngi qun tr h thng phi gn
quyn truy xut SQL Server cho mi ti khon ngi dng hoc ti khon nhm ngi dng
trn mng. SQL Server ci t trn Windows 9x khng h tr ch ny.
b- Ch hn hp (Mixed Mode):
Mt s User c th kt ni vi SQL Server vi xc nhn Windows NT. Mt s User
khc ch s dng xc nhn ca SQL Server (SQL Server Authentication) da trn Login Name
v Password do ngi qun tr CSDL cp.

2- Quyn thao tc trn SQL
Server:
Ty theo yu cu, mi ngi
dng c th c gn hoc khng gn
cc quyn nh :
Quyn s dng cc ng dng CSDL
trong SQL Server
Quyn to v sa i cu trc cc i
tng trong SQL Server
Quyn truy cp v x l d liu.
Lp trnh SQL Server
- 8 -
Chng 2 : Cc Pht Biu C Bn Ca Transact-SQL
I- GII THIU NGN NG TRANSACT-SQL :
T-SQL is ngn ng th tc th h th 3. Khng ging nh nhng NNLT khc, bn
khng th dng n to ra cc chng trnh ng dng c lp. Cc pht biu ca n ch
c thc hin trong mi trng SQL Server vi mc ch truy vn v hiu chnh d liu
trong CSDL quan h.
T-SQL c cc pht biu c phn loi nh sau :
Data Control Language (DCL): Cha cc lnh iu khin, phn quyn truy xut d
liu.
Data Definition Language (DDL): Dng to, sa xa cc i tng trong CSDL
nh Database, table, Index, Default, Procedure, Function, Schema, View, v Trigger,
Data Manipulation Language (DML): Cha cc lnh thm, sa, xo d liu
Data Query Language (DQL) : Ch cha 1 pht biu SELECT dng truy vn d liu
Cc thnh phn khc ca ngn ng nh kiu d liu, bin, ton t, hm, cc cu trc
iu khin v ch thch.
CSDL s dng trong chng ny:
a. KHUVUC(MaKV, TenKV, MaNVQL)
b. NHANVIEN(MaNV, HoTenNV, Phai, LuongCB, CongViec, #MaKV)
c. LOAIHANG(MaLH, TenLH)
d. MATHANG(MaMH, TenMH, DVT, DonGia, SoTon, MaLH)
e. HOADON(SoHD, NgayHD, MaNV)
f. CTHD(MaHD, MaMH, SL, DGBan)
II- Kiu d liu:
Cc kiu d liu trong SQL gm c cc loi sau:
Trc hng
S Chnh Xc - Exact Numerics
S nguyn:
Bigint (8 bytes) gi tr t -2^63 n 2^63-1
Int :(4 bytes) gi tr t -2^31 n 2^31 - 1.
SmallInt : (2 bytes) gi tr t 2^15 n 2^15 - 1.
Tinyint : (1 byte) gi tr t 0 n 255.
Lun l
Bit : c gi tr 0, 1 hoc NULL.
S thc
Decimal(n, d) : -10^38 +1 n 10^38 1. n <= 38; d mc nh bng 0
Numeric(n, d) : Ging nh decimal.
Tin t :
Money : -2^63 n 2^63 - 1, chnh xc n 2 ch s sau du thp
phn..
SmallMoney : -214,748.3648 n +214,748.3647,vi chnh xc n 2
ch s sau du thp phn .

S gn ng - Approximate Numerics
Float[(n)] : -1.79E + 308 n 1.79E + 308. n c gi tr t 1 53, l s bt
dng lu phn nh tr
Real : -3.40E + 38 n 3.40E + 38.

Ngy gi Bao trong du
Lp trnh SQL Server
- 9 -
Datetime : 1-1- 1753 n 31-12- 9999, chnh xc 3/100 giy hay 3.33
milliseconds.
Smalldatetime : 1-1- 1900 n 6-6- 2079, vi chnh xc l 1 pht.
nhy n.
Chui k t (khng theo Unicode) - Character Strings
Char(n) : di c nh, ti a l 8000 k t.
Varchar(n): di khng c nh, ti a l 8000 k t.
Text : di khng c nh, ti a l 2^31 1 k t.
Bao trong du
nhy n
Chui k t Unicode - Unicode Character Strings
nChar(n) : di c nh, ti a l 4000 k t.
nVarchar(n) : di khng c nh, ti a l 4000 k t.
nText : di khng c nh, ti a l 2^30 1 k t.
Bao trong du
nhy n v phi
bt u bng ch
N: Nsssss
S nh phn - Binary Strings
Binary(n) : di c nh (ti a 8000 bytes).
Varbinary(n) : di thay i (ti a 8000 bytes).
Image : di thay i (ti a 2^31-1 bytes).
0Xnnnn
Other Data Types
Cursor : kiu con tr
Sql_Variant : Nhn gi tr ca nhiu kiu d liu khc nhau trong SQL
Server ngoi tr cc kiu text, ntext, timestamp, v sql_variant.
Table : dng lu tr cc tp d liu cho ln x l sau.
Timestamp : kiu s (binary(8) hay varbinary(8)). Ct khai bo kiu ny
s c t ng cp nht vi gi tr phn bit mi khi thm mt mu tin
mi..
UniqueIdentifier : A globally unique identifier (GUID).


Ch : Kiu Text, nText, v Image khng dng cho bin cc b.
Trc hng (Literals): bao gm hng s (Number - V d. 1234.56 1234.56), hng vn
bn (Text) v ngy gi trong cp du nhy n (V d. Nguyn Hng Anh ) v hng
lgic (True hay False)
III- TRUY XUT D LIU : (DATA QUERY LANGUAGE) :
SELECT <danh sch cc ct>
[INTO new_table ]
[FROM <bng ngun>]
[WHERE <iu kin chn dng> ]
[GROUP BY <danh sch ct kha phn nhm>]
[HAVING <iu kin chn nhm> ]
[ORDER BY <danh sch ct kha sp xp> [ASC | DESC ]]
C php y ca pht biu Select kh phc tp. Chng ta s ln lt lm r tng
phn ca pht biu ny.
1- FROM CLAUSE :
Ch nh ngun d liu. truy vn thng tin t nhiu bng, S dng php kt gia cc
bng trong mnh FROM: (theo ANSI)
<table_source> <join_type> <table_source> ON <search_condition>
<join_type>: Gm cc php kt :
INNER JOIN, LEFT [OUTER] JOIN; RIGHT [OUTER] JOIN;
FULL [OUTER] JOIN : kt hp Left Join v Right Join
CROSS JOIN : khng c mnh ON v l php tch Cartesian.
<search_condition>: ch nh iu kin lin kt gia 2 bng.
Lp trnh SQL Server
- 10 -
2- SELECT CLAUSE :
SELECT [DISTINCT] [TOP n [PERCENT] [ WITH TIES] ] <column_list>
[FROM <table_list>]
- DISTINCT : Ch hin nhng dng c d liu phn bit.Mc nh cc dng trng d
liu u c xut hin trong kt qu.
- TOP n [PERCENT] : ch hin n dng hoc n% dng u tin. n l s nguyn t 0 n
100.
- WITH TIES: hin lun nhng dng c cng gi tr ca nhng ct kha sp xp trong
mnh ORDER BY.
- <column_list> ::= { * | { table_name | view_name | table_alias }.*
| column_name [ [AS] column_alias ]
| expression [ [AS] column_alias ]
| column_alias = expression } [,...n]
Du * : hin th tt c cc ct ca cc table
{ TableName | ViewName | TableAlias }.* : Hin tt c cc ct ca bng ch
nh.
ColumnName [AS] ColunmAlias : i tn ct trn bng ngun. Nu b danh c
du cch hoc trng vi t kho ca SS, bn phi ghi b danh trong du nhy
n hoc du ngoc vung ([])
column_alias = expression hoc expression [AS] column_alias: To ct tnh
ton. Nu khng ch nh Column Alias th ct khng c tn.
expression l dy cc ton hng (Operand) ni vi nhau bi cc php ton
(Operator):
a- Cc php ton c th l:
Cc php ton s hc: * (nhn), / (chia), % (phn d); + (cng), - (tr). Th t u tin
cao nht theo 3 cm t tri qua phi.
Php ni chui : ( + )
b- Ton hng c th l:
Tn thuc tnh (c th km theo tn bng v du chm ng trc).
Hm (function).
Trc hng (Literals): bao gm hng s (Number - V d. 1234.56 1234.56), hng vn
bn (Text) v ngy gi trong cp du nhy n (V d. Nguyn Hng Anh ) v
hng lgic (True hay False); Gi tr NULL.
Tn bin (Variable)
c- Cc hm ton hc:
ABS(x) : Tr tuyt i ca x
SQRT(x) : Cn bc hai ca x
SQUARE( x) : x
2
POWER( y, x ) : y
x
LOG(x) : Logarit t nhin ca x
EXP(x) : Hm m c s e ca x: e
x
.
SIGN(x) : Ly du ca s x (-1: x<0, 0: x=0, +1: x>0)
ROUND(x,n) : Lm trn ti n s l.
CEILING( x) : S nguyn nh nht nhng ln hn x
FLOOR(X) : S nguyn ln nht nhng nh hn x
... v cc hm lng gic: SIN, COS, TAN, ASIN, ACOS, ATAN ...
d- Cc hm x l chui k t:
ACSII( ch ) : M ASCII ca k t ch
CHAR( n ) : K t c m ASCII l n
Lp trnh SQL Server
- 11 -
LOWER( str ) : Tr v chui ch thng
UPPER(str) : Tr v chui ch hoa
LTRIM(str) : Tr v chui khng c du cch bn tri
RTRIM(str) : Tr v chui khng c du cch bn phi
LEFT(str,n): Ly n k t pha tri ca dy str.
RIGHT(str,n): Ly n k t pha phi ca dy str.
SUBSTRING(str, start, n): Ly n k t ca dy str k t v tr start trong dy.
REPLACE(str1, str2, str3): thay th tt c str2 trong str1 bng str3.
STUFF(str1, start, n, str2 ): Thay th n k t trong str1 t v tr start bng chui str2.
STR( x, len [, Dec]): Chuyn s x thnh chui.
e- Cc hm x l ngy thng v thi gian:
GETDATE(): Cho ngy thng nm hin ti (Oracle: SYSDATE)
DAY(dd): Cho s th t ngy trong thng ca biu thc ngy dd.
MONTH(dd): Cho s th t thng trong nm ca biu thc ngy dd.
YEAR(dd): Cho nm ca biu thc ngy dd.
Datepart Abbreviations
Year yy, yyyy
Quarter qq, q
Month mm, m
Day of year dy, y
Day of Month dd, d
Week of year wk, ww
Weekday dw
Hour hh
Minute mi, n
Second ss, s
DATEPART(datepart, date)
DATEADD(datepart,number, date)
DATEDIFF(datepart, date1, date2)

Millisecond Ms
f- Cc hm chuyn i kiu gi tr:
CAST(expression AS data_type[(length)])
CONVERT (data_type[(length)], expression [, style])
Style : Dng thc kiu ngy m bn mun khi chuyn i d liu kiu datetime hoc
smalldatetime ti kiu k t (nchar, nvarchar, char, varchar, nchar, or nvarchar), Hoc dng
chui m bn mun khi chuyn d liu kiu s (float, real, money, or smallmoney) sang kiu
k t(nchar, nvarchar, char, varchar, nchar, or nvarchar).
Trong bng, 2 ct bn tri biu din dng gi tr datetime hoc smalldatetime chuyn
sang character. Cng thm 100 cho gi tr style c dng nm 4 ch s.
Without
century (yy)
With century
(yyyy)
Standard Input/Output**
- 0 or 100 (*) Default mon dd yyyy hh:miAM (or PM)
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 British/French dd/mm/yy
4 104 German dd.mm.yy
5 105 Italian dd-mm-yy
6 106 - dd mon yy
Lp trnh SQL Server
- 12 -
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 or 109 (*) Default+milliseconds mon dd yyyy hh:mi:ss:mmmAM
(or PM)
10 110 USA mm-dd-yy
V d: Select Conver(Char(8), GetDate(), 2) -- kt qu : 04.09.16
Gi tr Style chuyn kiu float hay real sang kiu k t.
0 (the default): Ti a 6 ch s, dng trong k hiu khoa hc.
1 lun lun 8 ch s. Lun dng trong k hiu khoa hc.
2 lun lun 16 ch s. Lun dng trong k hiu khoa hc..
In the following table, the column on the left represents the style value for
money or smallmoney conversion to character data.
0 (the default) Khng du phy phn cch hng ngn; c 2 ch s thp phn.
V d: 4235.98.
1 C du phn cch hng ngn v 2 ch s thp phn;
V d: 3,510.92.
2 Khng du phy phn cch hng ngn, ; c 4 ch s thp phn.
V d: 4235.9819.
g- Mt s hm h thng:
ISDATE(variable | column name): Kim tra dng ngy hp l. Tr v 1 nu hp l v 0
nu khng hp l.
ISNUMERIC(variable | column name): Kim tra dng s hp l. Tr v 1 nu hp l v 0
nu khng hp l.
ISNULL(expression, value) : Tr v gi tr value nu expression c gi tr NULL, ngc
li tr v gi tr ca expression. Gi tr tr v cng kiu vi exoression.
NULLIF(exp1, exp2) : Tr v gi tr NULL nu exp1 = exp2.
COALESCE(exp1, exp2, .., expN) : tr v biu thc khc NULL u tin.
@@ROWCOUNT: Tr v s dng (kiu integer) tr v bi pht biu cui cng.
V d: cp nht d liu vi UPDATE v dng @@ROWCOUNT xc nh s dng
c thay i.
UPDATE authors SET au_lname = 'Jones'
WHERE au_id = '999-888-7777'
IF @@ROWCOUNT = 0
print 'Warning: No rows were updated'
@@ERROR : Tr v m li (integer) nu c ca pht biu T-SQL cui cng. Tr v s 0
nu khng c li.
V d: Dng @@ERROR kim tra vi phm rng buc (error #547) trong pht biu cp
nht.
USE pubs
GO
UPDATE authors SET au_id = '172 32 1176'
WHERE au_id = "172-32-1176"
IF @@ERROR = 547
print "Vi phm rng buc"

Lp trnh SQL Server
- 13 -
3- WHERE CLAUSE:
Chn la nhng mu tin theo iu kin.
Syntax: WHERE <search_condition> | <old_outer_join>
<old_outer_join> ::= column_name { *= | =* } column_name
3.1 Cc php ton so snh: <, <=, !<, >, >=, !>, =, <> hay !=.
Kt qu php so snh l gi tr lgc (True hoc False).
3.2 Cc php ton lgic: NOT, AND (conjunction), OR (disjunction).
Kt qu cc php ton lgc l mt gi tr lgc.
3.3 Cc php ton phm vi:
IS [NOT] NULL
[NOT] IN (<danh sch gi tr>)
[NOT] BETWEEN <Min> AND <Max>
[NOT] LIKE Mu v.bn --Dng k hiu thay th l du % v du (_ )
[NOT] EXISTS(SubQuery) : Tr v True nu tn ti t nht 1 mu tin.
3.4 <php so snh> [<lng t>] (SubQuery):
<Php so snh> c th l cc php so snh s hc (>, >=, <, <=, <>, =) hoc
php ton tp hp IN, LIKE hoc NOT LIKE.
<Lng t> c th l ALL, ANY (hoc SOME). Php so snh = ANY c th
c thay tng ng bng php ton IN; php so snh <> ALL c th thay
tng ng bng php ton NOT IN.
3.5 Php kt ngoi (outer join): column_name { *= | =* } column_name
Trong , php ton (*= ) Left outer join v php ton (=*) Right outer join.
Ch : nh li th t cc phn ca kiu ngy ph hp vi hng kiu ngy trong
biu thc iu kin. S dng lnh : SET DATEFORMAT mdy | dmy | ymd | ydm | myd | dym
4- ORDER BY CLAUSE:
Mnh ORDER BY dng sp xp kt qu tm c. C php mnh ny l:
ORDER BY <tnct>|<biuthc> [ASC | DESC], <tnct>|<biuthc> [ASC | DESC], ...
5- Tng hp d liu:
5.1 Cc hm tng hp:
AVG( [Distinct] Column_name)
Count( * )
Count([Distinct] Column_name)
Max(Column_name)
Min(Column_name)
Sum([Distinct] Column_name)
V d: Cho bit s mt hng bn trong ngy cui cng:
SELECT COUNT( DISTINCT MaMH) FROM HoaDon, CTHD
WHERE HoaDon.NgayHD IN (SELECT MAX(NgayHD) FROM HoaDon)
AND HoaDon.MaHD = CTHD.MaHD
5.2 GROUP BY CLAUSE:
C php: GROUP BY [ALL] <danh sch ct kha phn nhm>
Phn nhm mu tin theo gi tr ca cc ct lm chun phn nhm, Mi nhm d liu
tr v mt dng tng hp.
Lp trnh SQL Server
- 14 -
Mnh GROUP BY ALL tr v tt c cc nhm, k c nhng nhm khng tha mn
iu kin ca mnh WHERE.
Ch : Mnh GROUP BY phi cha tt c cc ct khng tng hp c trong mnh
SELECT.
5.3 HAVING CLAUSE:
C php: HAVING <iu kin chn nhm>
Dng ch nh nhng dng tng hp xut hin phi tha mn iu kin ch nh.
IV- TON T UNION:
Dng kt hp cc kt qu ca 2 hay nhiu truy vn vo cng mt kt qu.
SELECT <danh sch cc ct>
FROM <bng ngun>
[WHERE <iu kin chn dng> ]
[GROUP BY <danh sch ct kha phn nhm>]
[HAVING <iu kin chn nhm> ]
UNION [ALL]
SELECT <danh sch cc ct>
FROM <bng ngun>
[WHERE <iu kin chn dng> ]
[GROUP BY <danh sch ct kha phn nhm>]
[HAVING <iu kin chn nhm> ]
[ORDER BY <danh sch ct kha sp xp> [ASC | DESC ]]
Ch :
Cc kt qu truy vn phi cng s ct, cng th t v cng kiu d liu tng ng tng
ct.
Bng kt qu c tn ct c to t Select u tin.
Mnh ORDER BY ch cho php ng cui trong lnh UNION
T kha ALL : dng ch nh hin th c nhng dng trng d liu. Nu khng c t
kha ALL th ch hin cc dng phn bit.
V- DATA MANIPULATION LANGUAGE (DML)
1- CHN MU TIN MI :
a- Chn trc tip mt mu tin mi:
C php: INSERT INTO <table name> [( column list)] VALUES (value list)
b- Chn d liu t cc bng :
C php: INSERT INTO <table name> [(column list)] <SELECT Statement>

2- SA D LIU:
C php 1:
UPDATE <table name> SET {<column name> = <value>} [,...n ]
[FROM { < table_source > } [ ,...n ] ]
[WHERE <conditions>];
C php 2:
UPDATE <table name> SET {<column name> = <Select statement>}[,n]
[FROM { < table_source > } [ ,...n ] ]
Lp trnh SQL Server
- 15 -
[WHERE <conditions>];
V d :
Cp nht s tn v gp i n gi ca cc mt hng c m loi hng bng 1
UPDATE MatHang SET SoTon = IsNull(SoTon, 0) + 100 , DonGia = DonGia * 2
WHERE MALH = 1
Cp nht s tn ca cc mt hng bn trong ngy
UPDATE MatHang SET SoTon = SoTon - SL
FROM CTHD, HoaDon , MatHang
WHERE CTHD.SoHD = HoaDon.SoHD
And CTHD.MaMH = MatHang.MaMH
AND HoaDon.NgayHD = (SELECT MAX(HoaDon.NgayHD) FROM
HoaDon)
Cp nht tin Ha n ca cc ha n bn trong ngy
UPDATE HoaDon
SET TienHD = (SELECT SUM(SL*DGBan) FROM CTHD
WHERE HoaDon.MaHD = CTHD.MaHD)
Where HoaDon.NgayHD IN (SELECT MAX(NgayHD) FROM HoaDon)
Tng n gi ca 10 mt hng c n gi thp.
UPDATE MatHang SET DonGia = DonGia * 1.1
FROM MatHang,
(SELECT TOP 1 * FROM MatHang ORDER BY DonGia) AS t1
WHERE MatHang.MaMH = t1.MaMH
Hay c th b tn table MatHang trong mnh FROM
UPDATE MatHang SET DonGia = DonGia * 1.1
FROM (SELECT TOP 1 * FROM MatHang ORDER BY DonGia)
AS t1 WHERE MatHang.MaMH = t1.MaMH
3- XA MU TIN:
C php 1: DELETE FROM <Table Name> [WHERE <conditions>];
C php 2: DELETE <Table Name> FROM <Join Table> [WHERE <conditions>];
V d :
Xa ha n c m ha n bng 1
Delete From CTHD WHERE MAHD = 1 And MaMH = 5
Xa cc CTHD ca cc ha n bn trong ngy
Delete CTHD
FROM CTHD, HoaDon
WHERE CTHD.SoHD = HoaDon.SoHD
AND HoaDon.NgayHD = (SELECT MAX(HoaDon.NgayHD)
FROM HoaDon)
Xa MatHang n gi thp.
DELETE MatHang
FROM MatHang,
(SELECT TOP 1 * FROM MatHang ORDER BY DonGia) AS t1
WHERE MatHang.MaMH = t1.MaMH
Lp trnh SQL Server
- 16 -
Hay c th b tn table MatHang trong mnh FROM
DELETE MatHang
FROM (SELECT TOP 1 * FROM MatHang ORDER BY DonGia)
AS t1 WHERE MatHang.MaMH = t1.MaMH
4- To mi mt bng vi cc b gi tr ly t CSDL:
C php: SELECT <Column list> INTO <new table name> .

Lp trnh SQL Server
- 17 -
Chng 3 : TO LP CSDL TRN SQL SERVER
I- Cc Loi File Lu Tr CSDL :
Khi to mt CSDL, SQL
Server s to nhng file lu tr.
C 2 loi file nh sau:
File d liu: bao gm
File chnh (Primary data
file): Mi CSDL ch c 1
file d liu chnh c phn
m rng l MDF.
Cc file d liu ph
(Secondary data files):
Cc file ny cha cc d
liu v i tng khng
nm va trong Primary
file. Mt s CSDL c th
ln n ni phi cn
nhiu file d liu ph hay
cn s dng cc file ph trn cc a ring phn d liu qua nhiu a. Cc file d
liu ph tip theo nn c phn m rng l NDF.
Cc file nht k (Log files): lu tr nht k giao tc (LDF) (Transaction log) thc hin
trn CSDL, nhm mc ch phc hi CSDL khi c s c.
Khi s dng nhiu file d liu, SQL Server t ng tri d liu qua tt c cc file d
liu. iu ny lm gim tranh chp v cc im nng (hotspot) trong d liu.
Tuy nhin, i vi file nht k, SQL khng tri thng tin trn cc file nht k. Khi 1
file nht k y, thng tin s c ghi tip vo file khc.
II- To CSDL:
to CSDL bn c th dng cu lnh Create Database trong Query Analyzer hoc s
dng tin ch Enterprise Manager.
1- Bng Lnh CREATE DATABASE:
C php : CREATE DATABASE DatabaseName
[ ON [PRIMARY] ( <Thng tin File D Liu>) , ]
[LOG ON ( <Thng tin File Log>) , ]
Trong :
<Thng tin File> = ( FILENAME = 'd:\Path\FileName'
[, NAME = LogicalName ]
[, SIZE = <Size MB or KB>]
[, MAXSIZE = < MaxSize > ]
[, FILEGROWTH = <No of KyloByte or Percentage>] )
Arguments
Database_name : Tn Database phi c phn bit trn cng server (ti a 128 k
t)
ON : Khai bo cc file cha CSDL
PRIMARY: Dng ch nh file chnh ca CSDL. Nu khng ch nh Primary, file u
tin c lit k trong pht biu Create Database tr thnh primary file.
Lp trnh SQL Server
- 18 -
NAME = LogicalName : Tn lun l ca File lu tr CSDL. Tn ny c s dng
trong cc pht biu ca T-SQL. Yu cu phn bit.
FILENAME = 'FileName' : Tn lu trn a. Bao gm c a, th mc
SIZE = <size MB or KB> : Kch thc File theo n v MB (mc nh) hoc KB.
Thp nht 512 KB, mc nh 1 MB.
MAXSIZE = max_size : Ch nh kch thc ti a m file c th tng. Nu khng ch
nh, kch thc file s tng cho n khi a y.
FILEGROWTH : Khai bo s gia khi tng kch thc File, khng c ln hn
MaxSize. Mc nh l 10% v gi tr nh nht l 64 KB.
LOG ON : Khai bo cc file dng lu tr nht k thao tc trn database. Nu khng
ch nh LOG ON, SQL t to mt file nht k c size bng 25 percent ca tng kch
thc ca tt c cc data files trn database.
V d 1: To CSDL BanHang, bt u c kch thc 20MB trong , 15MB dnh cho file
d liu v 5MB dnh cho file nht k.
CREATE DATABASE BanHang
ON ( NAME = Sales_dat,
FILENAME = c:\mssql7\data\saledat.mdf,
SIZE = 15MB, MAXSIZE = 50MB,
FILEGROWTH = 20% )
LOG ON ( NAME = Sales_log,
FILENAME = c:\mssql7\data\salelog.ldf,
SIZE = 5MB, MAXSIZE = 20MB,
FILEGROWTH = 1MB )
V d 2: To CSDL lu nhiu file. Theo Microsoft, File d liu u tin c phn m rng l
MDF, cc file d liu cn li c phn m rng l .NDF. Cc file nht k c phn m
rng l LDF.
CREATE DATABASE BanHang
ON ( NAME = Sales_dat1,
FILENAME = 'c:\data\sale.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
( NAME = Sales_dat2,
FILENAME = 'c:\data\sale1.ndf',
SIZE = 10, MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log1',
FILENAME = 'c:\data\sale.ldf',
SIZE = 5, MAXSIZE = 20,
FILEGROWTH = 5 ),
( NAME = 'Sales_log2',
FILENAME = 'c:\data\sale1.ldf',
SIZE = 5, MAXSIZE = 20,
FILEGROWTH = 5 )

Do khng dng t kha PRIMARY nn
mc nh file u tin (Sale_dat1) l file chnh.
CREATE DATABASE BanHang
ON ( NAME = Sales_dat1,
FILENAME = 'c:\data\sale.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
PRIMARY ( NAME = Sales_dat2,
FILENAME ='c:\data\sale1.ndf',
SIZE = 10, MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log1',
FILENAME = 'c:\data\sale.ldf',
SIZE = 5, MAXSIZE = 20,
FILEGROWTH = 5 ),
( NAME = 'Sales_log2',
FILENAME = 'c:\data\sale1.ldf',
SIZE = 5, MAXSIZE = 20,
FILEGROWTH = 5 )

Do dng t kha PRIMARY nn file
(Sale_dat2) l file chnh.
Ch thch:
Lp trnh SQL Server
- 19 -
CSDL mi c to l bn sao ca CSDL Model, nn mi th trong CSDL Model
s c trong CSDL mi. Mc nh, cc thnh vin c vai tr sysadmin System
Administrater v dbcreator Database Creators mi c quyn to Database mi.
2- Bng Enterprise Manager:
Click phi vo Folder Databases hoc khong trng trn khung bn tri, chn New
Database, ca s to CSDL c hin th:

Tab General: Nhp tn Database trong Name, v d: TheThao.
Tab Data Fiels : Database files: hin dng cha tn file d liu, v d: Thethao_Data,
vi kch thc ban u l 1MB trong th mc mc nh \Data.
File properties:
Check Box Automatically grow file: c chn cho php tng kch
c file. Kch c ti a, c ch nh khng hn ch (Unrestricted
filegrowth) hoc hn ch (Restrict filegrowth (MB)).
Tab Transaction Log: tn file nht k mc nh l TheThao_Log.LDF
III- Xa CSDL
1- Bng lnh DROP DATABASE:
C php: DROP DATABASE <DatabaseName> [, ]
V d: DROP DATABASE mydb1, mydb2
Ch :
CSDL Master c Table SYSDATABASES cha thng tin nh Name, ID, ca
cc database trn Server
If Exists(Select True From master..SysDatabases Where Name =
Thuvien)
Drop Database ThuVien
Bn phi c vai tr db_owner trn CSDL.
Khng ai ang lm vic vi CSDL
2- Bng Enterprise Manager:
Click phi vo tn Database trn khung bn tri, chn Delete.
Lp trnh SQL Server
- 20 -
IV- Sa i CSDL
1- Bng lnh ALTER DATABASE:
thm hay xa file v nhm file hoc thay i cc thuc tnh ca file v nhm file,
nh thay i tn v dung lng ca file s dng c php:
ALTER DATABASE databasename
ADD FILE <Thng tin File D Liu> [,...n]
| ADD LOG FILE <Thng tin file Log > [,...n]
| REMOVE FILE <Tn logic>
| MODIFY FILE <Thng tin file>
Cc v d:
A. Thm 1 file cha d liu cho database
CREATE DATABASE Test
ON ( FILENAME = 'C:\data\Testdat1.ndf',
NAME = Testdat1, SIZE = 5MB, MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
ALTER DATABASE Test
ADD FILE ( NAME = Testdat2,
FILENAME = 'c:\mssql7\data\Testdat2.ndf',
SIZE = 5MB, MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
C. Thm 2 file Log kch thc 5-MB cho Database
ALTER DATABASE Test
ADD LOG FILE
( NAME = Testlog2,
FILENAME = 'C:\Data\Testlog2.ldf',
SIZE = 5MB, MAXSIZE = 100MB,
FILEGROWTH = 5MB),
( NAME = Testlog3,
FILENAME = 'c:\Data\Testlog3.ldf',
SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB)
D. Xo file ca database
ALTER DATABASE Test REMOVE FILE Testdat2
E. Sa file : Tng kch thc file cho Test database in Example B.
ALTER DATABASE Test
MODIFY FILE (NAME = Testdat1, SIZE = 20MB)
2- Bng Enterprise Manager:
Click phi vo tn Database trn khung bn tri, chn Properties.
V- i Tn CSDL:
EXEC SP_RENAMEDB OldName, NewName
Ch :
Bn phi l c quyn Admin
Lp trnh SQL Server
- 21 -
CSDL phi ch SingleUser
Tn cc file v nhm file khng b nh hng bi s thay i.
VI- Xem Thng Tin CSDL:
1- Trong Query Analyzer Bng Th Tc Lu Tr H Thng:
Thng tin ca cc Database c lu tr trong table h thng SYSDATABASES ca
CSDL Master. Bn c th lit k bng lnh:
Select * From Master.dbo.SysDatabases
Ngoi ra, bn c th dng cc system stored procedures hin th thng tin about
databases and database options:
System stored procedure Description
SP_HELPDB Hin th thng tin ca tt c Databases trn Server gm:
name, size, owner, ID, creation date, and status information.
SP_HELPDB database_name Hin th thng tin ca database c ch nh, gm : name,
size, owner, ID, creation date, and status information. Ngoi
ra cn cho bit chi tit cc file d liu v log file.
SP_SPACEUSED [objname] Kch thc ca current database hoc table trong current
database.
V d 1: Xem thng tin ca CSDL TheThao
EXEC SP_HELPDB TheThao
V d 2: Xem kch thc CSDL TheThao.
USE TheThao
Go
EXEC SP_SPACEUSED
V d 3: Xem kch thc table tblCLB
USE TheThao
Go
EXEC SP_SPACEUSED tblCLB
Lp trnh SQL Server
- 22 -
VII- TO TABLE :
Khi to table, bn cn quan tm n cc yu t trn cc Field c to nh :
Key : Field l kha hay khng
ID : Field c thuc tnh Identity hay khng
Column Name : Tn Field
Data Type : Kiu d liu ca Field
Size : Kch thc lu tr
Allow Null : Cho php Null
Default : Gi tr mc nh
Identity : Field s c gi tr tng t ng, vi gi tr ban u l bao nhiu (Identity
Seed) v s gia(Identity Increament) l bao nhiu.
Tn Table bn nn t vi tip u ng l tbl.
1- BNG ENTERPRISE MANAGER:
Click phi vo mc Tables trn khung tri v chn New Table

2- Bng lnh Create Table:
C php :
CREATE TABLE [DatabaseName.[Owner].| Owner.] TableName
( <ColumnDefinition> | ColumnName AS <Expression> | <TableConstraint> [,...n] )
a) Khai Bo Cu Trc :
Mi ct bn cn ch nh: <TnCt> <DataType>
Example
CREATE TABLE customer
(cust_id uniqueidentifier ROWGUIDCOL NOT NULL DEFAULT NEWID(),
cust_name char(30) NOT NULL)
b) Khai bo rng buc :
C 2 loi khai bo RB:
Khai bo RBTV trn mi ct: (Column Constraint)
Sau li khai bo tn v kiu ca ct bn c th khai bo tip cc RB d liu trn ct .
Lp trnh SQL Server
- 23 -
Cc RB c th l :
NULL hoc NOT NULL
PRIMARY KEY hoc UNIQUE [ CLUSTERED | NONCLUSTERED ]
Clustered : Mt Table ch c 1 ch mc loi ny, xc nh th t vt l ca table.
c dng cho cc thuc tnh thng phi tm kim gi tr trn
Non-Clustered: Sp xp d liu theo cc Field ch nh. Mt Table c th c
nhiu ch mc loi ny. D liu v Index c lu 2 ni khc nhau .
REFERENCES ref_table [(ref_column)]
[ ON DELETE { CASCADE | NO ACTION} ]
[ ON UPDATE { CASCADE | NO ACTION } ]
CHECK (logical_expression)
DEFAULT <Exp> : Gi tr mc nh ca ct trn mu tin mi
IDENTITY [(seed, increment )] : Thng c dng khai bo cho ct kiu s
nguyn, l kho chnh ca table. Ch nh gi tr c ghi trn mu tin mi l mt
s phn bit vi cc mu tin khc. Trong : Seed -gi tr khi u v Increment -
s gia.
V d: CREATE TABLE [dbo].[SanPham] (
MaSP SmallInt Identity (1,1) NOT NULL ,
TenSP varchar(30) NOT NULL,
DonGia Money Default 0,
SoTon Real Default 0 ) ON PRIMARY
Ch :
Mi table ch c 1 ct mang thuc tnh IDENTITY.
Hm IDENT_SEED(tablename) : tr v gi tr Seed, nu table khng c ct khai
bo Identity s cho gi tr NULL.
Hm IDENT_INCR(tablename) : tr v gi tr Increment.
Hm @@IDENTITY dng nhn gi tr identity ca mu tin c chn cui cng.
SQL Server t ng t tn cho mi RB. Tuy nhin, Bn c th t tn RB bng c
php :
[CONSTRAINT <Tn RB>]
/********************** table CongViec************************** */
CREATE TABLE CONGVIEC
( MACV smallint IDENTITY(1,1) CONSTRAINT PK_CV PRIMARY KEY CLUSTERED,
MOTA varchar(50) CONSTRAINT NN_MOTA NOT NULL DEFAULT 'Cong Viec Moi',
LCBmin tinyint CONSTRAINT NN_LCBmin NOT NULL
CONSTRAINT CHK_LCBmin CHECK (LCBmin >= 10),
LCBmax tinyint CONSTRAINT NN_LCBmax NOT NULL
CONSTRAINT CHK_LCBmax CHECK (LCBmax <= 250)
)
/* ***************** publishers table ******************** */
CREATE TABLE publishers
( pub_id char(4) NOT NULL
CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED
Lp trnh SQL Server
- 24 -
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')
)
Khai bo rng buc trn nhiu ct ca Table: (Table Constraint)
c khai bo ring, nm sau cc khai bo ct. Bao gm cc rng buc:
[ CONSTRAINT constraint_name ]
PRIMARY KEY | UNIQUE ( column [ ASC | DESC ] [ ,...n ] )
FOREIGN KEY ( column [,...] ) REFERENCES ref_table [( ref_column [,...] )]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
CHECK ( logical_expression )
V d:
CREATE TABLE DDH
( MADH SmallInt IDENTITY(1,1) CONSTRAINT PK_DDH PRIMARY KEY CLUSTERED,
MaNCC SmallInt NOT NULL CONSTRAINT FK_DHH_NCC REFERENCES NHACC(MaNCC),
NgayDH SmallDateTime DEFAULT GetDate() NOT NULL,
NgayYCGiao SmallDateTime DEFAULT GetDate() NOT NULL,
CONSTRAINT CHK_NgayYCGiao CHECK (NgayDH <= NgayYCGiao)
)
Go
EXEC SP_HELP DDH /*Xem thng tin Table
c) Khai bo ct biu thc:
Ct biu thc, cn gi l ct o, c d liu ly t nhng ct khc bng nhng biu
thc. Khng dng biu thc l truy vn con. Ct o khng tham gia vo kha ca bng.
C php: ColumnName AS <Expression>
V d : CREATE TABLE mytable
( low int, high int,
myavg AS (low + high)/2
)
EXEC sp_help mytable /*Xem thng tin Table
d) To Table Tm :
Table c to bng cc pht biu trn s c lu tr trong CSDL ang m. Nhng
i khi bn cn to mt Table m bn s xa ngay. Khi bn c th to table tm lu tr bn
trong CSDL TempDB bng c php trn nhng s dng k hiu # (Pound) k trc tn Table.
CREATE TABLE #MyTable (
Field1 int PRIMARY KEY,
Field2 char(10) NOT NULL,
Field3 datetime )
Table tm c th cc b (local) hoc ton cc ph thuc vo phm vi hot ng:
Table cc b, c khai bo vi 1 du #, ch c truy xut bi kt ni va to ra
n.
Table ton cc, c khai bo vi 2 du #, c truy xut bi cc kt ni hin hnh
Lp trnh SQL Server
- 25 -
VIII- THAY I CU TRC BNG ALTER TABLE:
Cc trng hp thay i cu trc bng, l: B sung thm ct mi (ADD Column);
Xa ct; Sa i nh ngha ca ct (MODIFY Column) v lnh hy b RBTV trn ct hay
trn c bng.
C php chung:
ALTER TABLE table_name
ALTER COLUMN column_name {data_type [(p[, s])] [NULL|NOT NULL]}
| ADD {[<column_definition>] | ColName AS Expression },...
| DROP COLUMN column [,...n]
| [WITH CHECK | WITH NOCHECK] ADD {<table_constraint> }[,...n]
| DROP [CONSTRAINT] constraint_name
| {CHECK | NOCHECK} CONSTRAINT {ALL | constraint_name[,...n]}
| {ENABLE | DISABLE} TRIGGER {ALL | trigger_name[,...n]}
1- Sa i kiu d liu hoc kch thc ca ct :
ALTER TABLE table
ALTER COLUMN ColName DataType [(p [, s])] [NULL | NOT NULL ]
V d: Sa li kch thc ct tn nhn vin (Name) thnh 25 k t:
ALTER TABLE NhanVien ALTER COLUMN HoTenNV CHAR (25)
Ch : Khng th sa ct :
C kiu text, image, ntext, or timestamp
Ct tnh ton hoc dng trong ct tnh ton
s dng trong cc rng buc ngoi tr ch thay i kch thc.
Khng c php sa i kch thc ca ct cho nh li, v cng khng c php
thay i kiu d liu ca ct, tr trng hp ct cha c d liu g.
Khng th sa i ct hin cha gi tr NULL t thuc tnh NULL thnh NOT
NULL.
2- Thm ct
ALTER TABLE table_name ADD <nh ngha ct> [,...]
V d: Thm vi ct c rng buc:
CREATE TABLE ViDu ( CotA INT CONSTRAINT CotA_un UNIQUE)
GO
ALTER TABLE ViDu ADD
/* Thm ct kha chnh */
CotB INT IDENTITY CONSTRAINT CotB_pk PRIMARY KEY,
/* Thm ct tham chiu vi ct khc trn cng table*/
CotC INT NULL
CONSTRAINT CotC_fk REFERENCES ViDu(CotA),
/* Thm ct vi rng buc dng thc ca d liu */
CotD VARCHAR(16) NULL
CONSTRAINT CotD_chk
CHECK (CotD IS NULL OR CotD LIKE "[0-9][0-9][0-9]-[0-
9][0-9][0-9][0-9]" OR CotD LIKE "([0-9][0-9][0-9]) [0-9][0-
9][0-9]-[0-9][0-9][0-9][0-9]"),
Lp trnh SQL Server
- 26 -
/* Thm ct vi gi tr mc nh */
CotE DECIMAL(3,3) CONSTRAINT CotE_defa DEFAULT .081
GO
EXEC SP_HELP ViDu
Ch : Trong trng hp Table c d liu, nu bn cn:
Thm ct NOT NULL: Phi thc hin qua 3 bc: (i) thm ct vi thuc tnh NULL,
(ii) in y cc gi tr cho ct, (iii) i li thuc tnh ca ct thnh NOT NULL.
Thm ct mi v in gi tr Default cho cc dng ang tn ti trong bng:
Dng DEFAULT vi thuc tnh WITH VALUES cung cp gi tr cho mi
dng ang tn ti trong bng.
ALTER TABLE MyTable ADD AddDate smalldatetime NOT NULL
CONSTRAINT AddDateDflt DEFAULT GetDate() WITH VALUES
3- Xa ct :
ALTER TABLE <tablename> DROP COLUMN ColName [,...n]
V d : CREATE TABLE ViDuXoaCot ( CotA INT, CotB VARCHAR(20) NULL)
GO
ALTER TABLE ViDuXoaCot DROP COLUMN CotB
GO
EXEC sp_help ViDuXoaCot
GO
Ch : Khng th xa nhng ct:
ang dng trong mt Index.
C rng buc CHECK, FOREIGN KEY, UNIQUE, or PRIMARY KEY.
C ch nh gi tr DEFAULT.
C ch nh rule.
4- Thm RBTV cho bng :
ALTER TABLE TableName
[WITH CHECK | WITH NOCHECK] ADD { <TableConstraint> }[,...n]

<TableConstraint>::= [CONSTRAINT constraint_name ]
PRIMARY KEY( Col1 [ ,...n ] )
UNIQUE ( Col1 [ ,...n ] )
FOREIGN KEY ( Col1 [ ,...n ] ) REFERENCES ref_table ( ref_col [ ,...n ] )
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
DEFAULT <Exp> FOR Col [ WITH VALUES ]
CHECK( BT iu kin )
V d: ALTER TABLE SanPham
ADD CONSTRAINT SoTon_defa DEFAULT 0 FOR SoTon
WITH NOCHECK: Khng kim tra rng buc i vi nhng d liu ang c trn
ct
ALTER TABLE ViDu WITH NOCHECK
ADD CONSTRAINT CotA_chk CHECK (CotA > 1)
GO
ALTER TABLE CTDH WITH NOCHECK
Lp trnh SQL Server
- 27 -
ADD CONSTRAINT SoLuong_chk CHECK (SoLuong >=0)
Ch : sa i RBTV, trc ht cn loi b (DROP) chng ri sau b sung
RBTV mi.
5- Hy b RBTV khi bng.
ALTER TABLE table DROP CONSTRAINT <Tn RBTV>
6- Kch hot hay tm ngng kim tra cc rng buc Foreign key v Check:
ALTER TABLE table
{CHECK | NOCHECK} CONSTRAINT {ALL | ConstraintName[,...n]}
V d :-- Disable the constraint and try again.
ALTER TABLE ViDu NOCHECK CONSTRAINT CotA_chk
-- Reenable the constraint and try another insert, will fail.
ALTER TABLE ViDu CHECK CONSTRAINT CotA_chk
7- i tn ct :
SP_RENAME 'TableName.OldColName', 'NewColName', 'COLUMN'
V d: SP_RENAME 'customers.[contact title]', 'title', 'COLUMN'
IX- XA TABLE :
C php:: DROP TABLE <tn bng> [, ]
V d:
A. Xa table trong database hin hnh: DROP TABLE titles1
B. Xa table trong database khc : DROP TABLE pubs.dbo.authors2
Ch : Khng th xa Table cha c tham chiu bi Table khc.
X- I TN BNG:
C php: EXEC SP_RENAME 'OldName', 'NewName'
V d: i tn table customers thnh custs.
EXEC sp_rename 'customers', 'custs'
XI- XA CC DNG TRN TABLE V GII PHNG VNG NH:
C php: TRUNCATE TABLE <TableName>
Ng ngha: Khc vi DELETE FROM <tn bng> c s dng xa bn ghi khi
bng nhng vng nh trn b nh th cp (a t hoc vt mang tin t tnh khc) vn khng
c gii phng dng li. Lnh TRUNCATE sau khi xa b cc bn ghi khi bng th
vng nh ca cc bn ghi ny s c thu hi v cho php cc bng khc s dng.
Ghi ch: Ch c ngi to ra bng hoc nhng ngi qun tr CSDL mi c quyn hn
TRUNCATE bng.

Lp trnh SQL Server
- 28 -
Chng IV : TO VIEW (BNG O)
I- Khi nim :
View l i tng dng truy xut d liu trn cc Table to ra bng o cha d liu
c yu cu. Thng qua
II- S DNG T-SQL:
1- To View bng T-SQL:
CREATE VIEW ViewName [(ColName1, ...)]
[WITH ENCRYPTION]
AS <Pht biu select>
[WITH CHECK OPTION]
V d:
USE BanHang
CREATE VIEW vwTienHD (MaHD, NgayLap, TienHD)
AS SELECT a.MaHD, NgayHD, SUM(SL*DG)
FROM HoaDon a, CTHD b
GROUP BY a.MaHD, NgayHD
HAVING SUM(SL*DG) > 0
Go
EXEC sp_helptext vwTienHD
SELECT * FROM vwTienHD
V d: CREATE VIEW vwTienHD (MaHD, NgayLap, TienHD)
AS
SELECT a.MaHD, NgayHD, SUM(SL*DG)
FROM HoaDon a, CTHD b WHERE Year(NgayHD) =2004
GROUP BY a.MaHD, NgayHD HAVING SUM(SL*DG) > 0
Union
SELECT a.MaHD, NgayHD, SUM(SL*DG)
FROM HoaDon a, CTHD b WHERE Year(NgayHD) =2005
GROUP BY a.MaHD, NgayHD HAVING SUM(SL*DG) > 0
Go
EXEC SP_HelpText vwTienHD
2- Cc hn ch khi to Views
Views khng thc hin trn cc bng tm.
Lnh CREATE VIEW khng th kt hp vi cc pht biu T-SQL khc trong mt gi
Views khng c hn 1024 columns.
Khng cha mnh INTO.
3- M ha View:
trnh trng sao chp nh ngha View, bn c th m ha View bng cch thm t
kha WITH ENCRIPTION trc t kha AS.
V d: CREATE VIEW vwTienHD (MaHD, NgayLap, TienHD)
WITH ENCRIPTION
Lp trnh SQL Server
- 29 -
AS
SELECT a.MaHD, NgayHD, SUM(SL*DG)
FROM HoaDon a, CTHD b
GROUP BY a.MaHD, NgayHD
HAVING SUM(SL*DG) > 0
GO
EXEC SP_HELPTEXT vwTienHD
Kt qu l: The Object comments have been encription.
Ch : View m ha vn c th sa hoc xa n.
4- S Dng VIEW Thay i D Liu:
Bn c th s dng View trong cc pht biu Insert, Update, Delete thay i d liu
trn Table ngun ca View.
Cc hn ch :
Khng th s dng lnh INSERT hay DELETE trn View c s dng pht biu
INNER JOIN. (Tr khi c s dng INSTEAD OF Trigger)
Khng th s dng lnh INSERT nu View c khai bo ct tnh ton hoc cha
nhng ct c rng buc NOT NULL m khng khai bo gi tr mc nh
V d : CREATE VIEW vwCTHD (MaHD, MaMH, SoLuong)
AS
SELECT MaHD, MaSP, SL
FROM CTHD
Where MaHD = 10248
Go
Insert vwCTHD(MaHD,MaMH,SoLuong) Values(10248,1,20)
Insert vwCTHD(MaHD,MaMH,SoLuong) Values(10249,1,20)
Bn c th rng buc d liu c cp nht phi tha mn iu kin Where ca View
bng cch khai bo thm T kha : WITH CHECK OPTION
CREATE VIEW vwCTHD (MaHD, MaMH, SoLuong)
AS
SELECT MaHD, MaSP, SL
FROM CTHD
Where MaHD = 10248
WITH CHECK OPTION
Go
UPDATE vwCTHD SET soluong = soluong + 10
INSERT vwCTHD(MaHD,MaMH,SoLuong) VALUES(10248,1,20)
/* lnh chn sau y s b li : The attempted insert or update failed because the
target view either specifies WITH CHECK OPTION or spans a view that
specifies WITH CHECK OPTION and one or more rows resulting from
the operation did not qualify under the CHECK OPTION constraint.
INSERT vwCTHD(MaHD,MaMH,SoLuong) VALUES(10249,1,20)
5- Thay i nh ngha View:
Lp trnh SQL Server
- 30 -
S dng pht biu ALTER VIEW thay i nh ngha ca View nhng vn duy tr
giy php cho View. Nu bn xa View, sau to li n, bn phi cp li cc giy php cho
n.
Syntax
ALTER VIEW ViewName [(column , ...)]
[WITH ENCRYPTION]
AS
select_statement
[WITH CHECK OPTION]
6- Xa View:
DROP VIEW <view_name>
V d:
USE SieuThi
Go
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'vwCTHD')
DROP VIEW vwCTHD
GO
CREATE VIEW vwCTHD (MaHD, MaMH, SoLuong)
AS
SELECT MaHD, MaSP, SL
FROM CTHD
Where MaHD = 10248
III- S DNG ENTERPRISE MANAGER
Click phi vo i tng Views trn khung tri v chn New View

Lp trnh SQL Server
- 31 -
Click nt chn Table|View ngun.
Click nt thm ct Group By
To v khai bo thuc tnh cho cc Field
Click nt thc hin truy vn
Click nt lu v t tn View
Click nt m ca s thuc tnh ca
View


b) WITH CUBE
Tng hp theo tng nhm cc ct trong GROUP BY. ng thi tng hp trn tt c
mu tin.
V d:
SELECT MaNV, NgayHD, SUM(SL * DGBan) AS TienHD,
COUNT(HoaDon.MaHD) AS SoHD
FROM HoaDon INNER JOIN CTHD ON HoaDon.MaHD = CTHD.MaHD
WHERE (NgayHD = CONVERT(DATETIME, '1995-09-25 00:00:00', 102))
GROUP BY MaNV, NgayHD WITH CUBE
ORDER BY MaNV, NgayHD

c) WITH ROLLUP
WITH ROLLUP tng t WITH CUBE, nhng ch tng hp tng nhm cc ct t tri
sang phi khng tng hp cho cc ct.
V d:
SELECT MaNV, NgayHD, SUM(SL * DGBan) AS TienHD,
COUNT(HoaDon.MaHD) AS SoHD
FROM HoaDon INNER JOIN CTHD ON HoaDon.MaHD = CTHD.MaHD
WHERE (NgayHD = CONVERT(DATETIME, '1995-09-25 00:00:00', 102))
GROUP BY MaNV, NgayHD WITH ROLLUP
ORDER BY MaNV, NgayHD

Lp trnh SQL Server
- 32 -
CHNG V: STORED PROCEDURES
I- Khi nim:
Stored Procedure l mt i tng c xy dng bi nhng pht biu ca SQL
Server, v c lu tr trong CSDL vi 1 tn phn bit. Mi Stored Procedure c th cha
nhiu cu lnh SQL.
Stored Procedure tng t nh cc th tc trong cc NNLT khc v chng c th:
Cha cc pht biu v c th gi cc th tc khc (Nested) hoc qui (Recursive).
C th nhn cc tham s .
C th tr v cc gi tr tnh ton c trong th tc.
Khi mun thc hin cc pht biu lu tr trong th tc ta ch cn gi tn th tc.
Ch : Khng s dng pht biu CREATE to i tng bn trong Stored Procedure.
II- To Stored procedure Bng Lnh CREATE:
C php:
CREATE PROC[EDURE] <TnTT> [; number]
[Danh Sch tham s]
[WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION]
AS
[Danh Sch bin cc b]
<sql_statement>
GO
1- Bin cc b :
a) Khai bo bin cc b:
Trong T-SQL, bin cha gi tr trung gian phi c khai bo trc khi s dng:
DECLARE @VarName data_type [,...n]
Tt c cc bin cc b phi bt u bng k hiu @ trc tn ca n.
Phm vi bin: Bin khai bo trong mt strored procedure hoc mt gi lnh ch kh
dng bn trong vng khai bo n.
Trong T-SQL khng c khi nim bin ton cc.
V d: DECLARE @Counter int
DECLARE @FirstName varchar(25)
Hay khai bo trn cng dng:
DECLARE @FirstName varchar(25), @Counter int
Sau khi khai bo bin c gi tr NULL
b) Gn gi tr cho bin cc b:
Cch 1: SET @VarName = <Expression>
V d: Declare @Ngay DateTime
set @Ngay ='2005/5/15'
print @Ngay
Set @Ngay = @Ngay + 1
print @Ngay
Cch 2: Dng cu lnh Select:
SELECT @VarName = <Expression> [FROM ]
Lp trnh SQL Server
- 33 -
Nu query tr v nhiu record th gi tr trn record cui cng s c gn cho bin.
DECLARE @intMaNV int
SELECT @intMaNV = 5 + 6
SELECT @intMaNV = MAX(MaNV) FROM SieuThi..NhanVien
Nu SELECT tr v nhiu dng, th bin c gn gi tri t dng cui cng tr v bi
Select.
T-SQL c tnh nng t ng chuyn kiu. Do , c kh nng b mt d liu. Bn c
th dng hm chuyn i kiu:
CAST ( expression AS data_type )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
V d: To th tc thc hin truy vn MaHD, tin bn ca tng ha n.
2- C 2 loi tham s : Input v Output
C php : @TnTS datatype [= default][OUTPUT]
C th khai bo 1024 tham s. Cc tham s cch nhau bi du phy. Khng dng
Kiu hnh nh.
Nu cung cp gi tr mc nh cho tham s, th c th thc hin th tc m khng
ch nh gi tr cho tham s.
V d: To Stored Procedure Chn 10 mt hng c n gi cao nht gm cc ct:
Tn v n gi.
Use SieuThi
Go
CREATE PROCEDURE MuoiMHCaoNhat
AS
SET ROWCOUNT 10
SELECT MatHang.TenMH , MatHang.DonGia FROM MatHang
ORDER BY MatHang.DonGia DESC
Go
SET ROWCOUNT { n | @number_var }
Ch chn n dng u tin khi rt trch d liu..
b ch nh ny v cho hin ht cc dng : SET ROWCOUNT 0
V d: Xy dng th tc tr v n mt hng u tin c n gi cao nht:
CREATE PROCEDURE MuoiMHCaoNhat
@n smallint = 10
AS
SET ROWCOUNT @n
SELECT MatHang.TenMH , MatHang.DonGia
FROM MatHang
ORDER BY MatHang.DonGia DESC
Hay
CREATE PROCEDURE MuoiMHCaoNhat
@n smallint = 10
AS
Exec ('SELECT Top ' + @n + ' MatHang.TenMH , MatHang.DonGia
FROM MatHang
ORDER BY MatHang.DonGia DESC')

Lp trnh SQL Server
- 34 -
Ch : S dng 2 du nhy n bao cc bin chui hoc ngy
V d: Declare @str Char(10)
Set @str = Chao Ban
Exec (Select + @str + )
3- ;number:
Dng nhm cc th tc c cng tn v phn bit nhau bi s th t number. Khi , tn
ca th tc c thm s th t khai bo: orderproc;1, orderproc;2.
xa nhm th tc ny bn ch cn dng 1 lnh xa vi tn ca nhm.
III- THI HNH STORED PROCEDURE:
1- Thi hnh stored procedure khng c tham s:
Sau khi to xong, bn c th gi th tc trong QA nh sau:
MuoiMHCaoNhat
hoc EXEC MuoiMHCaoNhat
2- Thc hin Stored Procedures c Tham s
C 2 cc truyn gi tr cho tham s: Truyn theo v tr v truyn theo tn tham s.
Cch 1: Truyn tr theo v tr :
Phi lit k theo th t t tri sang phi. Ch c th b qua nhng tham s
gn gi tr mc nh cui cng. V d, th tc c 5 tham s gn mc nh, Bn c th
b qua tham s 4 v 5 nhng khng th b qua 4 v gn tr cho 5.
[EXEC[UTE]] TnTT gitr [OUTPUT] [,n]
Example
EXEC ThemHD 10, '2005/05/15
Cch 2: Truyn theo tn tham s:
[EXEC[UTE]] procedure_name @TnTS = value [OUTPUT] [,n]
3- Tr v gi tr vi tham s Output
CREATE PROC spTBCong
@Avg smallint Output,
@A smallint=3, @B smallint = 2,
AS
Select @Avg = (@A + @B) / 2
Go
nhn gi tr Avg: u tin bn phi khai bo mt bin, sau chy th tc.
V d: Declare @KQ smallint
EXEC spTBCong @KQ OUTPUT, 10
Select The Average Score is : , @KQ
Hay
Declare @KQ smallint
EXEC spTBCong @A = 10, @B = 9, @AVG = @KQ OUTPUT
Select The Average Score is : , @KQ
IV- Cc Pht Biu iu Khin:
1- Pht biu RETURN [<integer value to result>]:
Dng kt thc th tc v tr v ni gi mt s nguyn no , mc nh l 0.
Lp trnh SQL Server
- 35 -
V d: CREATE PROCEDURE MHCaoNhat AS
SELECT Top 1 With Ties MatHang.TenMH , MatHang.DonGia
FROM MatHang
ORDER BY MatHang.DonGia DESC
Return @@RowCount
nhn gi tr Return: u tin bn phi khai bo mt bin v sau chy th tc.
Declare @SoMT smallint
EXEC @SoMT = MHCaoNhat
Select So Mat Hang : , @SoMT
Go
Ch : Khi thc hin 1 cu lnh SQL hay Stored Proc c tham s, tt c cc du nhy n ()
dng ng v m cho mt chui hoc ngy thng u bt buc phi c.
2- Pht biu If .. Else:
IF <Boolean Expression>
BEGIN <Cc lnh> END
ELSE
BEGIN <Cc lnh> END
V d: To th tc lit k ha n theo thng v nm.
CREATE PROC spHD ( @Thang SmallInt, @Nam SmallInt )
As
If (@Thang <1 Or @Thang>12)
begin
Print 'Thang Sai'
return 0
end
Select * From Orders
Where Year(NgayLap) = @Nam And Month(NgayLap)= @Thang
Go
3- Hm CASE:
Tr v gi tr chn la t nhiu iu kin khc nhau
CASE c 2 dng :
Hm CASE n gin so snh 1 biu thc vi tp cc biu thc n gin xc nh kt
qu.
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[ELSE else_result_expression ]
END
V d: Simple Case
Create Proc spr_ThuTrongTuan
(@D As SmallDateTime, @Thu VarChar(10) OUTPUT)
As
Set @Thu = Case Datepart(w, @D)
When 1 Then 'Chu Nhat'
Lp trnh SQL Server
- 36 -
When 2 Then 'Thu Hai'
When 3 Then 'Thu Ba'
When 4 Then Thu Tu
When 5 Then Thu Nam
When 6 Then Thu Sau
Else 'Thu Bay'
End
Go
Hm CASE tm kim (searched CASE) kim tra cc biu thc iu kin xc nh
kt qu.
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[ELSE else_result_expression ]
END
V d: Xy dng th tc tr v s ngy trong thng khi bit thng v nm
Create Proc spr_Days (@Thang Int, @Nam Int)
As
Declare @SN Int
Set @SN = Case
When @Thang In (1,3,5,7,8,10,12) Then 31
When @Thang In (4,6,9,11) Then 30
When @Nam % 4 = 0 Then 29
Else 28
End
Return @SN
Go
- C th lng Case:
Create Proc spr_NgayTrongThang (@Thang Int, @Nam Int)
As
Declare @SN Int
Set @SN = Case
When @Thang In (1,3,5,7,8,10,12) Then 31
When @Thang In (4,6,9,11) Then 30
Else Case
When @Nam % 4 = 0 Then 29
Else 28
End
End
Return @SN
Go
Thc hin th tc:
Declare @SN int
Exec @SN = spr_ngaytrongthang 2,2000
Lp trnh SQL Server
- 37 -
print 'So ngay trong thang 2/2002 la ' + Cast(@SN As Char)
4- Pht biu WHILE :
WHILE c dng nhiu trong kiu d liu CURSOR. Thng thng WHILE thng
s dng duyt t mu tin u tin n mu tin cui cng hoc ngc li.
WHILE <boolean expression>
BEGIN
<Cc pht biu T-SQL>
[CONTINUE] [BREAK]
END
V d: To th tc tnh tng S = 1 + 3 + 5 + + (2N-1)
Create Proc TongLe ( @N int )
AS
DECLARE @I int, @S int
SET @I = 1
SET @S = 0
WHILE @I <= 2*@N -1
BEGIN
--WAITFOR DELAY '00:00:00.001'
Set @S = @S + @I
Set @I = @I + 1
END
Return @S
Gi thc hin:
declare @s int
Exec @s = tongle 3
print Tong la : + @s

Pht biu WAITFOR : WAITFOR DELAY <time> | TIME <time>
Khi s dng WHILE, c th dng thm lnh WAITFOR vi thi gian cho trc.
Tham s DELAY dng ch th khon thi gian ch nht nh. Thi gian tnh bng
h:m:s, ln nht l 24 gi.
Tham s TIME: ch th h thng ch cho n thi gian c ch nh.
V- Sa Xa Th Tc Lu Tr:
1- Thu thp thng tin v Th tc c lu:
xem ni dung cu lnh Create Proc ca th tc c lu, bn c th dng EM hay
chy th tc h thng sp_helftext vi tn th tc c lu.
sp_helptext spAuthors
2- i Tn TTLT: sp_Rename <OldName>, <NewName>
3- Xa Th tc c lu:
Ging nh xa cc i tng khc, chng ta li s dng pht biu Drop.
DROP PROC[EDURE] <tn Proc>
4- Thay i th tc lu tr:
ALTER PROC[EDURE] procedure_name [;number]
Lp trnh SQL Server
- 38 -
[Danh sch tham s]
[WITH RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION]
AS
sql_statement
GO
VI- X l li trong SP:
tng hiu nng ca stored procedures, Bn nn cha m tr v trng thi thnh cng
hay tht bi ca th tc. Nu tht bi th thng bo v li xy ra.
kim tra li bn s dng hm @@Error. tr v thng tin v li bn c th s
dng lnh Return hoc lnh Raiserror.
1- Hm @@ERROR
Hm @@ERROR cha m li cho pht biu va thc hin. N t ng xa v t li
m li vi mi pht biu c thc hin. Gi tr 0 nu pht biu thnh cng.
Bn c th dng hm @@ERROR xc nh m li hoc lm iu kin kt thc th
tc.
V d: Chn Ho n mi, nu ngy lp l ch nht th chuyn thnh ngy th 2
CREATE PROC spThemHD ( @MaHD SmallInt, @NgayLap SmallDateTime )
As
If (IsDate(@NgayLap) = 0)
Return 0
If DatePart(w, @NgayLap) = 1
Set @NgayLap = @NgayLap + 1
Insert Into HoaDon(MaHD, NgayLap) Values(@MaHD, @NgayLap)
If (@Error <> 0)
Begin
RaiseError(Loi them hoa don moi,10,1)
Return 0
End
2- Lnh RAISERROR
Pht biu RAISERROR dng xut thng bo li ly t table sysmessages hoc mt
thng bo vi ni dung no
RAISERROR ( { msg_id | msg_str } { , severity , state } [ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
Arguments
o msg_id: M s > 50000 ca dng thng bo do ngi dng to trn table sysmessages
bng th tc sp_AddMessage
o msg_str: Ni dung thng bo li cn xut. .
o severity: M s ch nh mc nghin trng ca li.
Mc t 0-19 c xem nh l thng tin phn hi. Mc t 0 n 16: li pht sinh
do d liu. Mc 10 l lbo co trng thi. Mc t 11 - 16 l nhng li c th c hiu
chnh bi user.
Mc t 20 - 25 ch nh cc li tc hi t ng dng khng th phc hi. Nu thng
bo mc ny, kt ni t Client n Server s b ngt.
Lp trnh SQL Server
- 39 -
o State: l s nguyn t 1 n 127 biu din thng tin v trng thi thnh cu ca li., nhm
ch r li thuc nhm no trong h thng li. Gi tr ph nhn ca state l 1.
o Argument: L tham s dng thay th vo nhng bin c s dng trong chui msg_str
hoc thng bo tng ng vi msg_id. Mi tham s thay th c th l 1 bin cc b hoc
gi tr thuc kiu: int1, int2, int4, char, varchar, binary, or varbinary.
RAISERROR ('The level for job_id:%d should be between %d and %d.',
16, 1, @@JOB_ID, @@MIN_LVL, @@MAX_LVL)
o Option: c th cha cc gi tr sau:
Value Description
LOG Ghi li vo file nht k.
NOWAIT Gi thng bo ngay lp tc n client.
SETERROR t gi tr msg_id hay 50000 cho hm @@ERROR.
V d: RAISERROR('Invalid member number', 10, 1) WITH LOG
Khi xut hin li, m li c t trong hm @@ERROR. Mc nh @@ERROR
c t bng 0 cho cc li c severity t 1 n 10.
3- Thm Thng bo li vo bng sysmessages:
a- Dng th tc sp_addmessage thm vo bng sysmessages. .
sp_AddMessage @msgnum = msg_id ,
@severity = severity ,
@msgtext = 'msg'
[ , @lang = 'language' ]
[ , @with_log = 'True | False' ]
[ , @replace = 'REPLACE' ]
msg_id: phi c gi tr t 50.001 tr ln.
REPLACE: dng ch nh lnh s thay th msg_id nu msg_id c trong bng.
Example: USE master
EXEC sp_addmessage @msgnum = 60000, @severity = 16,
@msgtext = Kiu d liu khng hp l , @lang = 'us_english', @with_log = 'true'
b- xa thng bo li : s dng sp_dropmessage
sp_DropMessage @msgnum = msg_id
Ch thch Comments
C 2 cch ch thch: ch thch trn cng dng lnh hoc ch thch trn nhiu dng.
Ch thch trn cng dng vi mt pht biu - In-Line Comments
S dng 2 du tr (--) trc li ch thch.
Ch thch trn nhiu dng Block Comments
Bt u bi /* v kt thc bi du */
Lp trnh SQL Server
- 40 -
Chng VI: Chuyn Tc V By Li
I- Cc Pht Biu Chuyn Tc Transactions:
1- Khi nim :
Transactions dng m bo rng cc lnh thay i d liu c x l trn vn. Nu c
mt lnh no trong Transaction b li th phi bi b cc lnh trong Transaction v phc hi
li ton b d liu b thay i bi cc lnh trong Transaction trc .
C 2 cch khai bo mt Transaction : Khai bo r rng hoc khai bo ngm nh
2- Cc Pht Biu ng gi mt Transaction :
a- Bt u mt chuyn tc:
Syntax : BEGIN TRAN[SACTION] [transaction_name]
C th khng cn t tn Transaction. Tuy nhin nn t tn Transaction d c.
b- Xc Nhn Kt Thc Thnh Cng Mt Chuyn Tc:
Syntax: COMMIT TRAN[SACTION] [transaction_name]
c- nh du v tr trong chuyn tc:
Lu v tr chuyn tc
Syntax: SAVE TRAN[SACTION] <save_name>
d- Kt thc khng thnh cng mt chuyn tc:
Khi gp lnh ny, tt c nhng lnh c thc hin trong Transaction bt u t lnh
Begin Tran hoc t v tr nh du trong chuyn tc s b bi b
Syntax: ROLLBACK TRAN[SACTION] [transaction_name] | [save_name]
V d : To SP thm mt sinh vin mi trong table SinhVien v thm vo table SV_Detai
MSDT m sinh vin thc hin.
Nu MSDT khng tn ti ch b thao tc chn mu tin mi cho Table SV_DeTai.
CREATE PROCEDURE ThemSVDT
@MSDT Char(6), @MSSV char(6),
@TenSV VarChar(30), @Lop char(6),
@SoDT VarChar(10)= NULL, @DiaChi Char(10)=NULL
AS
BEGIN TRANSACTION VT1
INSERT SinhVien (MSSV,TenSV,SoDT, Lop, DiaChi)
VALUES (@MSSV, @TenSV, @SoDT, @Lop, @DiaChi)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN VT1
RETURN 0
END

SAVE TRAN VT2
INSERT SV_DETAI(MSSV, MSDT)
VALUES (@MSSV, @MSDT )
Lp trnh SQL Server
- 41 -
IF (@@ERROR <> 0) ROLLBACK TRAN VT2
COMMIT TRANSACTION VT1
GO
3- Chuyn tc ngm nh: (Implicit Transactions)
Bt k transaction no m bt u, kt thc hoc roll back bng lnh BEGIN
TRANSACTION, COMMIT TRANSACTION, or ROLLBACK TRANSACTION u l
Explicit Transaction. Bn c th thc hin mt Implicit Transaction bng cch khai bo :
Syntax: SET IMPLICIT_TRANSACTIONS {ON | OFF}
Khi t ch Implicit Transaction l ON, Cc pht biu sau y s t ng bt u
mt Transaction:
o SELECT, INSERT, UPDATE, DELETE
o ALTER TABLE
o TRUNCATE TABLE
o OPEN, FETCH
o GRANT, REVOKE
Khi t ON, th cui cc Tracsaction cn phi c lnh Commit hoc Roll Back. Nu
khng th cc lnh trong Transaction v tt c d liu thay i s b b qua khi ngi dng
kt thc kt ni.
Nu ci t l OFF (default). Mi pht biu t ng xc nhn nu khng b li.
II- By Li TRIGGERS
1- Khi nim:
Trigger l dng t bit ca SP, dng khai bo rng buc d liu cho mt table, View
v t ng thc hin khi mt trong 3 pht biu Insert, Update, Delete thay i d liu trn
table . Trigger khng c gi trc tip nh SP, khng c tham s v gi tr tr v nh SP.
Trigger ch c thc hin khi pht biu cp nht tho mn cc rng buc khai
bo trn Table. Li ch chnh ca triggers l chng c th cha cc x l phc tp trn cc
table c d liu lin quan vi table ang cp nht.
Trigger c th cha pht biu ROLLBACK TRAN ngay c khi khng c pht biu
BEGIN TRAN. Trong trng hp pht biu ROLLBACK TRANSACTION bn trong 1
Trigger c thc hin:
Nu trigger ny c kch hot bi 1 pht biu cp nht t bn trong mt
transaction khc, th ton b Transaction b bi b.
Nu trigger c kch hot bi 1 pht biu cp nht t bn trong mt gi, th s bi
b ton b gi.
Da vo ng dng ca Trigger, c 3 loi Trigger nh sau: Insert Trigger; Update
Trigger; Delete Trigger
2- To Trigger cho Table:
C php To Trigger:
CREATE TRIGGER <trigger_name> ON <table name>
[WITH ENCRYPTION]
AFTER | FOR DELETE, INSERT, UPDATE
AS <Cc pht biu T-sql>
trigger_name : Tn Trigger phi phn bit.
ON <tablename> : tn table m Trigger s thc hin. Khng s dng Trigger cho
View.
Lp trnh SQL Server
- 42 -
WITH ENCRYPTION : M ha Trigger, khng cho xem v sa i cu lnh to
Trigger..
FOR DELETE, INSERT, UPDATE
Dng ch nh nhng pht biu cp nht no no trn Table s kch hot Trigger.
Khi thc hin Trigger, SQL s to cc bng tm: INSERTED v DELETED
o Khi Insert mu tin mi vo Table th mu tin mi cng lu trong table
INSERTED
o Khi Delete mu tin trong table: Th cc mu tin b xo c di chuyn sang
table Deleted.
o Khi Update mu tin trong table: th table v table Inserted u cha mu tin c
ni dung mi, cn Deleted cha mu tin c ni dung c.
Bn khng th thay i d liu trn cc table DELETED V INSERTED.
Nhng bn c th dng 2 table ny x l cc mu tin trn cc table lin quan. Ngoi
ra, trong trigger Insert v Update, bn c th thay i ni dung ca cc mu tin mi
bng lnh Update trn table c trigger.
AS : T kha bt u cc hnh ng bn trong Trigger. Trigger c th cha hu ht cc
lnh ca T-SQL ngoi tr mt s lnh sau:
Cc lnh CREATE, ALTER, and DROP.
TRUNCATE TABLE
SELECT INTO (because it creates a table)
Ch :
Ch ca table v nhng thnh vin c Role db_owner, db_ddladmin, v sysadmin c
th to v xo triggers. Cc permissions khng th sang nhng. Hn na, ngi to
Trigger phi c quyn thc hin tt c pht biu trn cc tables.
Triggers khng th to view v table tm (temporary tables), nhng chng c th tham
chiu n cc views v temporary tables.
Cc lnh INSERT, UPDATE, hoc DELETE c th tc ng trn nhiu dng. bit
c s dng b tc ng, s dng hm @@ROWCOUNT bn trong Trigger
a- S dng Trigger rng buc ton vn d liu:
V d: Khi xa hay thay i MSGV trong GIAOVIEN_HD, nu gio vin l ch tch hi
ng th bo li kt thc.
Create Trigger trg_XoaHoiDongGV On HoiDong_GV
For Delete, Update
As
If Exists(Select 1 From HoiDong a, Deleted b
Where a.MSHD = b.MSHD And a.MSGVCTHD = b.MSGV)
Begin
Raiserror('Khong xoa hay thay doi giao vien CTHD',16,1)
RollBack Tran
End
Kim tra Trigger:
Delete From HoiDong_GV Where MsHD = 1 And MsGV = 1
Go
Update HoiDong_GV Set MSGV = 5 From HoiDong_GV a, HoiDong b
Where a.MSHD = b.MSHD And a.MSGV = b.MSGVCTHD And b.MSHD = 1
Lp trnh SQL Server
- 43 -
Go
b- S dng trigger kim tra RB gi tr
V d: Kim tra RB : Mt hi ng khng c qu 10 ti.
Create Trigger trg_ThemHDDT On Hoidong_DT
For Insert, Update
As
If (Select Count(a.mshd) From HoiDong_DT a, INSERTED b
Where a.mshd = b.mshd) > 10
Begin
RaisError (Khong the > 10, 16, 1)
RollBack Tran
End
Go
V d: 2 Hi ng trong cng 1 ngy khng th trng phng
Create Trigger trg_HoiDong On HoiDong
For Insert, Update
As
If Exists(Select 1 From HoiDong a, Inserted b
Where a.MSHD = b.MSHD
And a.NgayHD = b.NgayHD And a.Phong = b.Phong)
Begin
Raiserror('Hai hoi dong cung 1 ngay khong trung phong',16,1)
RollBack Tran
End
Go
Update HoiDong Set NgayHD = '2001/10/30', Phong =2 Where MSHD = 4
V d: Mt gio vin khng th va l gio vin phn bin va l gio vin hng dn ti.
Ch : Bn c th nh ngha nhiu Trigger (khc tn nhau) cho cng mt hnh ng. Khi
th t thc hin cc trigger c xc nh da trn th t to ra chng. Bn c th thay i
th t thc hin mc nh ny bng SP: Sp_SetTriggerOrder
sp_SetTriggerOrder trg_UpdateAction2, First, Update
sp_SetTriggerOrder trg_UpdateAction1, Last, Update
SP ny ch c th ch nh trigger no c thc hin u tin v Trigger no c thc
hin cui cng. Cc Trigger cn li s thc hin theo th t to ra chng.
3- To Trigger cho View:
CREATE TRIGGER <trigger_name> ON <View name>
[WITH ENCRYPTION]
INSTEAD OF DELETE | INSERT | UPDATE
AS <Cc pht biu T-sql>
Trong cc phin bn trc phin bn 2000, bn khng th dng cc lnh Insert,
Update, Delete cp nht d liu trn View.
Trong phin bn 2000, bn c th cp nht d liu trn mt bng ngun ca View bng
tn ca View. Trng hp bn mun dng 1 lnh, cp nht trn nhiu bng ngun ca View
th phi to Trigger INSTEAD OF cho cc View .
Lp trnh SQL Server
- 44 -
Khng ging nh AFTER triggers, Ch c th INSTEAD OF cho mi lnh hoc
INSERT, hoc UPDATE, hoc DELETE. Cc Trigger INSTEAD OF s thc hin trc cc
AFTER triggers ci t cho cc Table
V d: To View lit k danh sch ti v sinh vin thc hin ti
CREATE VIEW vwSVDeTai
AS
SELECT A.MSDT, A.TENDT, B.MSSV, NULLIF(C.TENSV, NULL) As TENSV
FROM DETAI A INNER JOIN SV_DETAI B ON A.MSDT = B.MSDT
INNER JOIN SINHVIEN C ON B.MSSV = C.MSSV
thm ti mi trong table DeTai v sinh vin thc hin ti trong table
SV_DeTai, thay v thc hin 2 lnh Insert trn tng Table, bn c th thc hin 1 lnh thng
qua i tng View to.
INSERT vwSVDeTai(msdt, Tendt, mssv)
Values( 97014, 'Ma Hoa Du Lieu', '01th01')
lm c iu ny, bn phi to Trigger Instead Of Insert cho View
CREATE TRIGGER tgvwSVDeTai ON vwSVDeTai
INSTEAD OF INSERT
AS
If (Select Count(*) From Inserted) > 0
Begin
Insert detai(msdt, Tendt) Select A.msdt,A.tendt From Inserted A
Insert SV_detai(mssv,msdt) Select A.mssv,A.msdt From Inserted A
End
Ch : Vic s dng hm NULLIF(C.TENSV, NULL) As TENSV trnh trng hp li
TenSV khng c NULL v lc ny TenSV l mt Field tnh ton.
4- Kim Tra Ct c Cp Nht :
Hm Update(<Column Name>) : Dng kim tra <Column Name> c c cp nht
d liu hay khng.
Hm Columns_Update(): Tr v cc Byte cho bit nhng ct no c cp nht.
Mi Bit trong cc Byte ny tng ng vi mt ct trong Table theo th t t tri
qua phi. Ct no c cp nht th Bit tng ng c gi tr 1. S dng cc ton t
Bitwise kim tra ct no c cp nht.
^ (Bitwise Exclusive OR), & (Bitwise AND), | (Bitwise OR)
5- Disabling or Enabling a Trigger:
ALTER TABLE table ENABLE | DISABLE TRIGGER ALL | trigger_name[,n]
6- Hiu chnh Trigger:
Bn c th thay i cc lnh cn thc hin cng nh hnh ng cp nht m Trigger s
c gi thc hin.
ALTER TRIGGER trigger_name
7- Xa Trigger:
DROP TRIGGER {trigger} [,n]
Nu xa mt table th tt c Triggers ca n cng b xa.
Quyn xa :sysadmin, db_owner and db_ddladmin roles.
Lp trnh SQL Server
- 45 -

Lp trnh SQL Server
- 46 -
Chng 5 : Kiu Con Tr (SQL Cursor)
I- Tng Quan:
1- Khi nim:
Cursor l kiu d liu cho php truy xut n trn tng mu tin trong tp kt qu tr v
bi cu lnh Select. Ngoi ra, bn c th s dng cc pht biu Update hoc Delete cp
nht hay xa mu tin hin hnh trn cc bng c s ca Select bng mnh WHERE
CURRENT OF <Tn Cursor> .
2- Cc thao tc chung trn Cursor:
Khai bo cursor : DECLARE <cursor_name> CURSOR FOR <lnh Select>
M cursor : OPEN <cursor_name>
Sau lnh m cursor, con tr mu tin hin hnh nm vng BOF.
X l mu tin trn cursor:
Di chuyn mu tin hin hnh: FETCH NEXT FROM cursor_name
S dng pht biu Update hoc Delete cp nht hay xa mu tin hin hnh
ng cursor: CLOSE <tn cursor>
Hy b cursor: DEALLOCATE <TN CURSOR>
V d : in s bo danh
Create Proc Sc_DienSBD
As
Declare @I Int
--Khai bo bin Con tr
Declare Cursv Cursor For
Select Sbd, Tensv From Sinhvien Order By Tensv
Open Cursv --M con tr
--X l mu tin trn con tr
Set @I = 1
Fetch Next From Cursv
While @@Fetch_Status = 0
Begin
Update Sinhvien Set Sbd = @I Where Current Of Cursv
Fetch Next From Cursv
Set @I = @I + 1
End
Close Cursv --ng con tr
Deallocate Cursv --Gii phng con tr
Go
II- Khai bo Cursor:
DECLARE <CursorName> CURSOR
[ LOCAL | GLOBAL ] -- Phm vi hot ng
[ FORWARD_ONLY | SCROLL ] -- Phng thc di chuyn
[ STATIC | KEYSET | DYNAMIC ] -- Loi Cursor
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] X l ng thi
[ TYPE_WARNING]
FOR <lnh Select>
[ FOR UPDATE [ OF ColumnName [, n] ] ]
1- Phm vi hot ng ca Cursor:
Lp trnh SQL Server
- 47 -
Mc nh, cursor c phm vi Global trn kt ni m n c to. Ngha l, bn c
th s dng cursor trn cc gi thc hin trn kt ni , tr phi bn ng v gii phng
Cursor. Nu bn m Cursor cha ng th s b li v c khi b treo cho n khi ng kt ni.
Vi l do , khi khng s dng Cursor Global, bn nn ng v gii phng Cursor.
Nu bn mun to cursor Local bn phi ch nh r rng trong khai bo cursor:
Declare Cursv Cursor Local For
Select Sbd, Tensv From Sinhvien Order By Tensv
Cursor Local c phm vi hot ng bn trong gi to n. V t gii phng khi kt
thc gi.
2- Phng Thc Di Chuyn Trn Cursor:
C 2 phng thc di chuyn MTHH:
FORWARD_ONLY : l phng thc mc nh, ch cho php di chuyn sang mu tin
k tip.
SCROLL : Cho php di chuyn ln xung trong tp mu tin.
3- Cc Loi Cursor:
C 3 loi Cursor:
STATIC : c thuc tnh READ ONLY, do khng th cp nht cc bng nn thng
qua Cursor ny. Khi to Cursor Static, d liu t cc bng gc s c Copy sang mt
bng tm trong CSDL tempdb. Do , Nu cc table ngun ca Cursor b thay i d
liu th cc d liu khng xut hin trn Cursor.
Server: Msg 16929, Level 16, State 1, Procedure SC_DIENSBD, Line 14
The cursor is READ ONLY. The statement has been terminated.
DYNAMIC: Cho php cp nht d liu trn cc table ngun (dng mnh WHERE
CURRENT OF <tnCursor> trong cc pht biu UPDATE or DELETE), v t ng
hin th tt c nhng thay i t table ngun. Tuy nhin, d liu v th t ca cc mu
tin trong tp mu tin c th b thay i.
KEYSET : Ging nh cursor Dynamic. Nhng n ch c to khi bng ngun c khai
bo kha, nu khng th SQL t ng chuyn sang loi STATIC. Khi to Cursor
KEYSET, Tp cc kha ca bng ngun c lu trn mt table ca CSDL tempdb.
Do , vic xa mu tin hoc thay i gi tr kha trn cc bng ngun khng thng
qua Cursor s khng phn hi trn tp mu tin.
Cursor kiu STATIC, KEYSET, v DYNAMIC mc nh dng phng thc SCROLL.
TYPE_WARNING : Gi thng bo ch v client nu Cursor thc hin chuyn i
ngm nh t kiu yu cu sang mt kiu khc.
4- X l ng thi:
Trong mi trng nhiu ngi dng cng lm vic trn cng tp d liu, Lm th no
cc Users chc chn rng nhng thay i ca h khng b thay i bi ngi dng khc?
Ph thuc vo kiu Cursor m bn s dng, bn khng th nhn thy c nhng thay i
cho n khi bn ng Cursor v m li n.
Tr phi s dng cursor trong mt transaction, nu khng cc table ngun ca cursor
khng t ng kha d liu. SQL Server 2000 c 4 chn la cho php ngn cn vic sa i
mu tin cho ti khi thc hin xong hoc bng cch kha cc table ngun ca cursor bo v
cc thay i ca bn.
READ_ONLY : Dng khi ch truy xut d liu m khng sa i d liu.
SCROLL_LOCKS : Kho cc dng c c vo Cursor i vi cc User khc.
OPTIMISTIC WITH VALUES: Ch kha cc gi tr m bn va thay i. Nu ngi
dng khc thay i cc gi tr s nhn c thng bo li.
Lp trnh SQL Server
- 48 -
OPTIMISTIC WITH ROW VERSIONING Khi mun c dng c cp nht,
khng ch mt vi Fields trong n.
5- Khai bo ct trong Cursor c php cp nht:
UPDATE [OF column_name [,...n]]
Nu ch nh OF column_name [,...n] ch nhng ct lit k mi c sa i.
Nu ch nh UPDATE m khng ch nh danh sch ct, th tt c cc ct u c
kh nng cp nht tr phi ch nh READ_ONLY.
III- Truy xut d liu trn Cursor:
FETCH [ NEXT | PRIOR | FIRST | LAST
| ABSOLUTE { n | @nvar } | RELATIVE { n | @nvar } ]
FROM [ GLOBAL ] cursor_name
[ INTO @variable_name [ ,...n ] ]
o NEXT : Chuyn sang mu tin k tip.
o PRIOR : Chuyn v mu tin trc .
o FIRST : Chuyn v mu tin u tin.
o LAST : Chuyn n mu tin cui cng.
o ABSOLUTE {n | @nvar} : Nu n or @nvar > 0, tm n dng th n tnh t dng u tin
m xung trong tp mu tin. Nu n or @nvar < 0, tm n dng th n tnh t dng cui
cng m ln. Nu n or @nvar = 0, chuyn n vng BOF v khng c gi tr tr v. Hng
s n phi l s nguyn v bin @nvar phi thuc kiu smallint, tinyint, hoc int. Khng
s dng phng thc ABSOLUTE cho kiu DYNAMIC.
o RELATIVE {n | @nvar} : Nu n hoc @nvar > 0, chuyn xung n dng tnh t dng k
di dng hin hnh. Nu n or @nvar < 0, Chuyn ln n dng trc dng hin hnh. Nu
n or @nvar = 0, tr v dng hin hnh.
o cursor_name: Tn cursor ang m. Nu tn ti cursor cc b v cursor ton cc c cng
tn th tn cursor c s dng s l cursor cc b nu khng c t kha GLOBAL.
o INTO @varname[,...n] : Danh sch bin cc b nhn d liu tng ng t cc ct trn
mu tin hin hnh, theo th t t tri sang phi. S bin phi bng s ct lit k trong
cu lnh Select khi to Cursor. Kiu d liu ca mi bin phi tng thch vi kiu d liu
ca ct hoc c h tr chuyn kiu ngm nh theo kiu ca ct.
Kim tra kt qu ca lnh FETCH: S dng hm @@FETCH_STATUS sau lnh
FETCH. Hm tr v mt trong 3 gi tr:
0 Nu lnh FETCH chuyn n 1 mu tin trong danh sch.
-1 Nu lnh FETCH chuyn n vng BOF hoc EOF
-2 Nu chuyn n 1 dng b xa trn Server (Keyset).
V d:
CREATE proc sprcur
As
Declare @ms char(6), @ten varchar(30)
Declare a cursor SCROLL for select mssv, tensv from sinhvien
Open a
Fetch next from a into @ms, @ten
While @@fetch_status = 0
Begin
Print @ms + '-' + @ten
Fetch Next from a into @ms, @ten
End
Close a
Deallocate a
Lp trnh SQL Server
- 49 -
GO

Lp trnh SQL Server
- 50 -
CHNG 6 : BO MT (SECURITY)
I- Khi Nim:
Mi CSDL c 1 hay nhiu users c ch nh quyn truy xut d liu. Ngi qun tr
c th cp quyn truy xut CSDL bng cch to mt ti khon ng nhp (login) SQL Server
cho User, thm User vo CSDL v gn quyn cho User trn CSDL . Bao gm cc loi
quyn:
Quyn truy cp vo SQL Server
Quyn truy xut CSDL
Quyn thc hin trn cc i tng ca CSDL
Quyn x l d liu
II- S dng EM:
1- To Ti Khon ng Nhp (Login Acount):
(1) M mc Security, click phi mc Login v chn New Login
(2) Trn trang General, nhp tn ng nhp, ch xc nhn, CSDL mc nh.

Ch : ng nhp vi SQL Server thng dng cho vic kt ni quay s v mng peer-to-
peer.
(3) Trang Server Roles: Chn vai tr qun tr mc Server cho ti khon ng nhp
System Administrators
Security Administrators
Server Administrators
Setup Administrators
Database Creator
Disk Administrators
Process Administrators
Bulk Administrators
c quyn cao nht; cho php thc hin mi tc v trn SQL
Qun l cc server logins.
Cho php bn nh cu hnh nhng ci t server-wide.
Cho php thm v xa cc linked servers, v truy xut vi SP
To v hiu chnh databases.
Qun l cc files trn a.
Qun l tin trnh ang chy trong mt th hin ca SQL Server.
Thc hin pht biu BULK INSERT.
Ch :Bt k Users ca Windows NT thuc nhmBUILTIN\Administrators u c vai
tr sysadmin.
Lp trnh SQL Server
- 51 -
(4) Trang Database Access: Chn CSDL c php truy xut v vai tr ca n trong tng
CSDL c chn.
Fixed Database Role Description
Public Vai tr chung cho tt c ngi dng.
db_owner Quyn cao nht trong database.
db_accessadmin iu khin truy xut, ci t hoc xa user accounts.
db_datareader c tt c d liu trn database.
db_datawriter Thm, sa, xa d liu trn cc tables ngi dng trong database.
db_ddladmin Thm, sa, xa cc i tng objects (runs all DDLs).
db_securityadmin Qun l cc roles, cc thnh vin ca role, giy php trong database.
db_backupoperator Cho php back up database.
db_denydatareader T chi quyn truy vy d liu trong database.
db_denydatawriter T chi quyn thay i d liu trong database.
Sau khi to login, n t ng nhp vo tp Users ca mi database c chn, vi tn
User trng vi tn Login. Bn c th thay i thu hi vai tr ca n trn tng CSDL bng cch
sa i thuc tnh ca Login, hoc chuyn n tp Users ca database v thay i thuc tnh
hoc xo user no m bn khng mun cho truy xut data ca bn.
Cc Login c lu trong table SysLogins ca CSDL Master:
If Exists( Select 1 From Master..SysLogins Where Name = 'Login')
Cc User trong mt CSDL c lu trong table SysUsers ca CSDL
If Exists( Select 1 From SysUsers Where Name = 'User01')
2- Thay i thuc tnh cho Login:
Bm p vo tn Login hoc click phi v chn mc Properties
3- Cp Quyn Thc Thi Trn Mi CSDL:
Chn database, trong mc Users bm p vo tn User cn hiu chnh (Login-ID).
Click nt Permission ch nh quyn truy cp d liu trn tng Table, View. Quyn
kim tra RB tham chiu (DRI - Declarative Referential Integrity). Quyn thc hin cc th tc
lu tr.
Ch thch: Quyn kim tra RB tham chiu c s dng khi Table A c cp quyn Update
hoc Insert. Table A c RB FOREIGN KEY vi table B, m table B khng c cp
quyn SELECT.
4- Cp Quyn To i Tng Trn CSDL:
o Click phi vo tn CSDL, chn Properties
o Trong HT Properties, chn trang Permissions
o nh du chn cc pht biu c cn cp quyn thc hin cho cc User.
Lp trnh SQL Server
- 52 -
5- Xa User trn mt CSDL:
Click phi vo tn user v chn Delete.
6- To User vi Login c:
Click phi vo mc Users v chn New
Database User...
Ch : Bn c th thay i tn User bng cch xa
v to li vi login c.

7- Xa Ti Khon ng Nhp:
Click phi vo tn Login v chn Delete
Vi cch ny s xa b cc user trong cc CSDL chn cho ti khon ny.
III- S Dng QA:
1- To Ti Khon ng Nhp (Login Acount):
a- Thm Ti khon vi ch xc nhn SQL Server:
SP_ADDLOGIN [ @login = ] <'Tnngnhp'>
[ , @password = ] <'password'>
[ , @defdb = ] <'TnCSDL'>
[ , @deflanguage = ] <'Ngnng'>
[ , @sid =] <'M nhn dng Login'>
[ , @encriptopt = 'skip_encription' ]
o @defdb : tn CSDL mc nh c m khi ng nhp. Nu khng ch nh mc nh l
CSDL Master.
o @deflanguage : Ngn ng mc nh
o @sid : varbinary(16) : M nhn dng ca h thng. Nu khng ch nh, h thng t to
mt m s mi.
o @encriptopt varchar(20): Mc nh Password s c m ha khi lu trong cc table h
thng. Ngoi tr bn gn gi tr skip_encryption cho tham s ny.
o Th tc tr v gi tr 0 nu thnh cng, ngc li tr v gi tr 1.
V d: To ti khon tn 'myname', mt khu 'mypwd' vo CSDL 'QLDeTai'
Sp_AddLogin 'user01', '01', 'QLDeTai'
Kt qu tr v : New loigin created
b- Cp quyn kt ni cho User hay nhm User ca Windows kt ni n SQL Server:
SP_GRANTLOGIN [@loginame =] 'login'
'Login': <Domain>|<Computer name>\<tnnhm>
V d: Thm ti khon cho user Windows NT [Server4\User01] kt ni n SQL Server.
EXEC sp_grantlogin ' Server4\User01'
Hay EXEC sp_grantlogin [Server4\User01]
Ch : Ch c thc hin bi nhng thnh vin c vai tr sysadmin v securityadmin.
2- Thay i mt khu:
Sp_Password [ @old = ] <'oldPW'>
Lp trnh SQL Server
- 53 -
[ , @new = ] <'newPW'>
[ , @LoginName = ] <'login'>
3- Cp quyn Truy xut CSDL Hin Hnh cho Login:
Sp_GrantDBAccess [ @loginname = ] 'Tnngnhp'
[ [, @name_in_db = ] 'TnUser' ]
V d: Use QLDeTai
Go
sp_GrantDBAccess 'user01', 'Anh'
4- Xa quyn truy xut CSDL hin hnh:
Sp_RevokeDBAccess [ @name_in_db = ] 'TnUser'
V d: Sp_RevokeDBAccess 'Anh'
5- Cp quyn thc thi trn CSDL:
Bao gm cc quyn: Select, Insert, Update, Delete, Reference, Excecute.
GRANT ALL | <quyn> [,]
ON <TnTable|View>[(<tnct>,..)] | <tnSP>
TO <tn Login hoc Role> [,]
[WITH GRANT OPTION]
[AS <tn Role> ]
o All : Cp tt c cc quyn thc thi Select, Insert, Update, Delete hay Reference trn table
hay view; quyn Excecute cho SP.
o TO <tn Login hoc Role> : Khi cp quyn cho nhm hay user ca Windows NT, phi
ch nh: <Domain>|<Computer name>\<tnnhm>.
cp quyn cho nhm cc b Windows NT built-in, dng t kha BUILTIN thay
th tn domain hoc computer name.
Quyn thc thi cp cho role Public c p dng cho tt c users trong CSDL.
Quyn thc thi cp cho user Guest c s dng cho tt c Users khng c phn
quyn truy xut trn CSDL.
V d: USE QLDeTai
Grant All On DeTai To User01
GO
GRANT SELECT ON DeTai TO public
GO
GRANT INSERT, UPDATE, DELETE ON DeTai TO Mary, [Corporate\BobJ]
GO
o WITH GRANT OPTION : Cho php Login cp quyn ch nh trn i tng cho
Login khc.
o AS {group | role} : c dng khi quyn thc thi trn mt i tng cp cho nhm
hoc role, v mt User ca nhm hoc Role mun cp quyn thc thi cho User khc khng
l thnh vin ca nhm hoc Role.
V d: table NhatKy c to bi user Lac. Lac cp quyn SELECT table NhatKy cho
Role BanBe vi mnh WITH GRANT OPTION cc user thnh vin ca Role BanBe c
th nhng quyn ny cho cc user khc khng thuc Role BanBe.
User Hong, l thnh vin ca BanBe, mun nhng quyn SELECT table NhatKy cho
user Khoa, khng l thnh vin ca role BanBe.
/* User Lac */
GRANT SELECT ON NhatKy TO BanBe WITH GRANT OPTION
/* User Hong */
GRANT SELECT ON NhatKy TO Khoa AS BanBe
Lp trnh SQL Server
- 54 -
6- T Chi quyn thc thi trn CSDL:
DENY ALL | <quyn> [,]
[ ( column [ ,...n ] ) ] ON { table | view }
| ON table | view [ ( column [ ,...n ] ) ]
| ON stored_procedure
TO <tn Login hoc Role> [,] [Cascade]
V d: USE QLDeTai
GO
GRANT SELECT ON DeTai TO public
GO
DENY SELECT, INSERT, UPDATE, DELETE
ON DeTai TO Mary, John, Tom
7- Xa b quyn thc thi cp hoc t chi trn CSDL:
REVOKE [ GRANT OPTION FOR ]
{ ALL | permission [ ,...n ] }
[ ( column [ ,...n ] ) ] ON { table | view }
| ON { table | view } [ ( column [ ,...n ] ) ]
| ON { stored_procedure | extended_procedure }
| ON { user_defined_function }
TO | FROM security_account [ ,...n ]
[ CASCADE ]
[ AS { group | role } ]
V d : Xa b quyn Select t chi cho User Mary trn table DeTai.
REVOKE SELECT ON DeTai TO Mary
8- Cp Quyn to i tng trong CSDL:
GRANT ALL | <lnh> [,]
TO <tn Login hoc Role> [,]
Bao gm cc lnh: CREATE DATABASE; CREATE DEFAULT;
CREATE PROCEDURE; CREATE RULE; CREATE TABLE; CREATE VIEW;
BACKUP DATABASE; BACKUP LOG
V d: GRANT CREATE DATABASE, CREATE TABLE
TO Mary, John, [Corporate\BobJ]
9- T Chi quyn to i tng trn CSDL:
DENY { ALL | statement [ ,...n ] } FROM security_account [ ,...n ]
V d: DENY CREATE TABLE FROM Joe, [Corporate\BobJ]
10- Xa b quyn to i tng cp hoc t chi trn CSDL:
REVOKE { ALL | statement [ ,...n ] } FROM security_account [ ,...n ]
V d : REVOKE CREATE TABLE FROM Joe, [Corporate\BobJ]
IV- Vai Tr Ca User Trong SQL Server
SQL Server h tr 2 nhm roles:sion 28SQL Server Security 321
o Vai tr trn SQL Server Cha cc quyn qun tr SQL Server
o Vai tr trn Database: Cha cc quyn qun l v thc thi trn cc i tng ca
CSDL. Ngoi cc vai tr c cung cp bi SQL Server c th to thm vai tr
khc.
1- To Vai tr trn CSDL:
Trong EM: M CSDL, Click phi vo mc Roles v chn New Database Role,
Nhp tn Role mi v click nt Add thm User
Trong QA: SP_ADDROLE [@rolename =] 'role' [ , [@ownername =] 'owner']
V d: Trong CSDL QLDeTai thm role 'QuanLy'
Lp trnh SQL Server
- 55 -
SP_ADDROLE 'QuanLy'
Go
GRANT SELECT ON DeTai TO QuanLy
2- Thm User vo Role:
SP_ADDROLEMEMBER [@rolename =] 'role',
[@membername =] 'UserName'
V d: Cp quyn truy cp CSDL QLDeTai cho User v thm vai tr QuanLy cho User.
USE QLDeTai
GO
EXEC SP_GRANTDBACCESS 'Server4\User01', 'Hong'
GO
EXEC SP_ADDROLEMEMBER 'QuanLy', 'Hong'

You might also like