You are on page 1of 55

Lp trnh SQL Server

CHNG 1: TNG QUAN V SQL SERVER V CSDL QUAN H


IGII 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

-1-

Lp trnh SQL Server

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:


-2-

Lp trnh SQL Server

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.

-3-

Lp trnh SQL Server

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
-4-

Lp trnh SQL Server

To v qun l tm kim.

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.

-5-

Lp trnh SQL Server

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
-6-

Lp trnh SQL Server

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.

-7-

Lp trnh SQL Server

Chng 2 : Cc Pht Biu C Bn Ca Transact-SQL


IGII 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
-8-

Lp trnh SQL Server

Real : -3.40E + 38 n 3.40E + 38. Ngy gi Bao trong du Datetime : 1-1- 1753 n 31-12- 9999, chnh xc 3/100 giy hay 3.33 nhy n. milliseconds. Smalldatetime : 1-1- 1900 n 6-6- 2079, vi chnh xc l 1 pht. Chui k t (khng theo Unicode) - Character Strings Bao trong du Char(n) : di c nh, ti a l 8000 k t. nhy n 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. Chui k t Unicode - Unicode Character Strings Bao trong du nChar(n) : di c nh, ti a l 4000 k t. nhy n v phi nVarchar(n) : di khng c nh, ti a l 4000 k t. bt u bng ch nText : di khng c nh, ti a l 2^30 1 k t. N: Nsssss S nh phn - Binary Strings 0Xnnnn 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). 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.
-9-

Lp trnh SQL Server

<search_condition>: ch nh iu kin lin kt gia 2 bng.

-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) : x2 POWER( y, x ) : yx LOG(x) : Logarit t nhin ca x EXP(x) : Hm m c s e ca x: ex. 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
- 10 -

Lp trnh SQL Server

CHAR( n ) : K t c m ASCII l n 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(datepart, date) Datepart Abbreviations DATEADD(datepart,number, date) Year yy, yyyy DATEDIFF(datepart, date1, date2) 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 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 With century Standard Input/Output** century (yy) (yyyy) 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
- 11 -

Lp trnh SQL Server

7 8 10

-g

mon dd, yy hh:mm:ss mon dd yyyy hh:mi:ss:mmmAM (or PM) 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. 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. 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. 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"
- 12 -

107 108 9 or 109 (*)

Default+milliseconds

Lp trnh SQL Server

-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.
- 13 -

Lp trnh SQL Server

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-1
-a -b

DATA MANIPULATION LANGUAGE (DML) CHN MU TIN MI :


Chn trc tip mt mu tin mi: C php: INSERT INTO <table name> [( column list)] VALUES (value list) 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 ] ]
- 14 -

Lp trnh SQL Server

[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
- 15 -

Lp trnh SQL Server

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> .

- 16 -

Lp trnh SQL Server

Chng 3 : TO LP CSDL TRN SQL SERVER


ICc 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
- 17 -

Lp trnh SQL Server

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. 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
- 18 -

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

Lp trnh SQL Server

mc nh file u tin (Sale_dat1) l file chnh.

(Sale_dat2) l file chnh.

Ch thch: 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: V d: 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
- 19 -

DROP DATABASE <DatabaseName> [, ] DROP DATABASE mydb1, mydb2

Lp trnh SQL Server

-2

Bng Enterprise Manager:


Click phi vo tn Database trn khung bn tri, chn Delete.

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. E.

Xo file ca database
ALTER DATABASE Test REMOVE FILE Testdat2

Sa file : Tng kch thc file cho Test database in Example B.


ALTER DATABASE Test MODIFY FILE (NAME = Testdat1, SIZE = 20MB)

-2 V-

Bng Enterprise Manager:


Click phi vo tn Database trn khung bn tri, chn Properties.

i Tn CSDL:
EXEC SP_RENAMEDB OldName, NewName
- 20 -

Lp trnh SQL Server

Ch : Bn phi l c quyn Admin 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 SP_HELPDB Description 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

- 21 -

Lp trnh SQL Server

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:


CREATE TABLE [DatabaseName.[Owner].| Owner.] TableName ( <ColumnDefinition> | ColumnName AS <Expression> | <TableConstraint> [,...n] ) a)

C php :

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 .
- 22 -

Lp trnh SQL Server

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 ******************** */
- 23 -

Lp trnh SQL Server

CREATE TABLE publishers ( pub_id char(4) NOT NULL CONSTRAINT UPKCL_pubind PRIMARY KEY CLUSTERED CHECK (pub_id IN ('1389', '0736', '0877', '1622', '1756') OR pub_id LIKE '99[0-9][0-9]'), pub_name varchar(40) NULL, city varchar(20) NULL, state char(2) NULL, country varchar(30) NULL DEFAULT('USA') ) 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:
- 24 -

Lp trnh SQL Server

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

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
- 25 -

Lp trnh SQL Server

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]"), /* 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

- 26 -

Lp trnh SQL Server

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 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 -6

Hy b RBTV khi bng.


ALTER TABLE table DROP CONSTRAINT <Tn RBTV>

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:: 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. DROP TABLE <tn bng> [, ]

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.

- 27 -

Lp trnh SQL Server

Chng IV : TO VIEW (BNG O)


IKhi 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
- 28 -

Lp trnh SQL Server

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:

- 29 -

Lp trnh SQL Server

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

- 30 -

Lp trnh SQL Server

Click nt

chn Table|View ngun.

Click nt thm ct Group By To v khai bo thuc tnh cho cc Field Click nt Click nt Click nt View thc hin truy vn lu v t tn View m ca s thuc tnh ca

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

- 31 -

Lp trnh SQL Server

CHNG V: STORED PROCEDURES


IKhi 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] ca n. Tt c cc bin cc b phi bt u bng k hiu @ trc tn

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:
- 32 -

Lp trnh SQL Server

SELECT @VarName = <Expression> [FROM ] 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')
- 33 -

Lp trnh SQL Server

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. V d: CREATE PROCEDURE MHCaoNhat AS
- 34 -

Lp trnh SQL Server

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' When 2 Then 'Thu Hai'
- 35 -

Lp trnh SQL Server

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 print 'So ngay trong thang 2/2002 la ' + Cast(@SN As Char)
- 36 -

Lp trnh SQL Server

-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-1

Sa Xa Th Tc Lu Tr: 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 -3

i Tn TTLT: sp_Rename <OldName>, <NewName> 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] [Danh sch tham s]
- 37 -

Lp trnh SQL Server

[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.
- 38 -

Lp trnh SQL Server

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:
o

Value LOG NOWAIT SETERROR Ghi li vo file nht k.

Description

Gi thng bo ngay lp tc n client. 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 */

- 39 -

Lp trnh SQL Server

Chng VI: Chuyn Tc V By Li


I-1 Cc Pht Biu Chuyn Tc Transactions: 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
-a

Cc Pht Biu ng gi mt Transaction :


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. Xc Nhn Kt Thc Thnh Cng Mt Chuyn Tc: Syntax: COMMIT TRAN[SACTION] [transaction_name] nh du v tr trong chuyn tc: Lu v tr chuyn tc Syntax: SAVE TRAN[SACTION] <save_name>

-b -c

-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 ) IF (@@ERROR <> 0) ROLLBACK TRAN VT2
- 40 -

Lp trnh SQL Server

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.
- 41 -

Lp trnh SQL Server

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
- 42 -

Lp trnh SQL Server

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 .
- 43 -

Lp trnh SQL Server

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 -6

Disabling or Enabling a Trigger:


ALTER TABLE table ENABLE | DISABLE TRIGGER ALL | trigger_name[,n]

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.
- 44 -

Lp trnh SQL Server

- 45 -

Lp trnh SQL Server

Chng 5 : Kiu Con Tr (SQL Cursor)


I-1 Tng Quan: 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] ] ]
- 46 -

Lp trnh SQL Server

-1

Phm vi hot ng ca Cursor:

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.
- 47 -

Lp trnh SQL Server

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. 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
- 48 -

Lp trnh SQL Server

While @@fetch_status = 0 Begin Print @ms + '-' + @ten Fetch Next from a into @ms, @ten End Close a Deallocate a GO

- 49 -

Lp trnh SQL Server

CHNG 6 : BO MT (SECURITY)
IKhi 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) (2)

M mc Security, click phi mc Login v chn New Login 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-topeer. (3) Trang Server Roles: Chn vai tr qun tr mc Server cho ti khon ng nhp System Administrators c quyn cao nht; cho php thc hin mi tc v trn SQL Security Administrators Qun l cc server logins. Server Administrators Cho php bn nh cu hnh nhng ci t server-wide. Setup Administrators Cho php thm v xa cc linked servers, v truy xut vi SP Database Creator To v hiu chnh databases. Disk Administrators Qun l cc files trn a. Process Administrators Qun l tin trnh ang chy trong mt th hin ca SQL Server. Bulk Administrators Thc hin pht biu BULK INSERT.
- 50 -

Lp trnh SQL Server

Ch :Bt k Users ca Windows NT thuc nhmBUILTIN\Administrators u c vai tr sysadmin. (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 -3

Thay i thuc tnh cho Login:


Bm p vo tn Login hoc click phi v chn mc Properties

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.

- 51 -

Lp trnh SQL Server

-5 -6

Xa User trn mt CSDL:


Click phi vo tn user v chn Delete.

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'>
- 52 -

Lp trnh SQL Server

[ , @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 */
- 53 -

Lp trnh SQL Server

GRANT SELECT ON NhatKy TO Khoa AS BanBe

-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 ] DENY CREATE TABLE FROM Joe, [Corporate\BobJ]

V d:

-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

- 54 -

Lp trnh SQL Server

Trong QA: SP_ADDROLE [@rolename =] 'role' [ , [@ownername =]

'owner'] V d: Trong CSDL QLDeTai thm role 'QuanLy' 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'

- 55 -

You might also like