You are on page 1of 56

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 ho hu ht cc ng dng ln hin nay. ng dng kiu Client/Server: Mt ng dng kiu Clie hn: 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 cng truy cp d liu. iu ny khng ch tit kim m cn th hin tnh nht qun v mt d ver, khng c truy xut trc tip. Do , c bo mt cao, tnh nng chu li, chy n khch): L cc phn mm chy trn my trm cho php ngi s dng giao tip CSDL trn Serv ng lp trnh v truy vn CSDL Transact-SQL, mt version ca Structured Query Language. V nsact-SQL, bn c th truy xut d liu, cp nht v qun l h thng CSDL quan h. Vi mi DL SQL Server. Nu mun c nhiu h thng QTCSDL bn cn c nhiu my ch tng ng. Cc a) Phin bn chun (Standard Edition): l phin bn cung cp ton b chc nng v c thi Windows NT hoc Windows 2000 Server. b) Phin bn Personal Engine: Chy trn my n vi H s NT; Windows 2000 Server v c Windows 9x. N h tr hu ht cc tnh nng ca SQL Server. dng CSDL vi phin bn ny, sau trin khai trn cc phin bn khc. Ngoi ra cn cc ph T hoc 2000 Server nh : Enterprise Edition: dng cho x nghip Developer Edition : dng ch 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 y nhiu Field. Mi Field ng vi mt loi d liu cn lu tr. Table cn c cc thnh phn aint Rng but: Constraint l cc ch nh rng but d liu trong bng hoc cc bng kh ) Triggers By Li: Trigger thng cha cc m lnh kim tra d liu, c tnh nng t n d liu trong Table nh Insert, Update, Delete. c) Indexs Ch mc : H tr cho vic sp x anh thng tin trn table. 2- Diagram S quan h: Th hin mi quan h d liu gia cc ung nhn hay table o: L i tng dng hin th d liu c rt trch, tnh ton t cc red Procedure Th tc ni: Cha cc lnh T-SQL dng thc hin mt s tc v no . Store s. Stored Proc c bin dch trc, do thi gian thc hin nhanh khi c gi. C nhi in t sp_ c nhim v thu thp thng tin t cc bng h thng v rt c ch cho vic qu : Hm do ngi dng nh ngha 6- Users : Cha danh sch User s dng CSDL. Ngi qun tr Name l dbo, tn ng nhp (Login Name) h thng mc nh l sa. Ti khon sa lun tn ti sa, cch nhanh nht l: M trnh Query Analyzer Thc hin th tc h thng : EXEC SP_PASSWO ewPass> 7- Roles : Cc qui nh vai tr v chc nng ca User trong h thng SQL Server 8qui tc rng buc d liu c lu tr trn Table 9- Defaults : Cc khai bo gi tr mc Type : Kiu d liu do ngi dng t nh ngha 11-Full Text Catalogs : Tp phn loi d li 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 ng trn SQL Server, cha thng tin v h thng SQL Server : Cc ti khon ng nhp, cu cc CSDL to, cc th tc h thng thc hin cc tc v qun tr h thng, cc th tc c thm hay xa Stored Procedure, cc thng tin ny u c lu tr trong CSDL master. Ch aster mi khi bn sa i h thng. 2- Model : Cha cc template dng lm mu to CSDL m L Server ly tt c cc mu (bao gm Tables, Views,) t CSDL ny. 3- MSDB: dng h tr dc gent, bao gm sp xp thng tin v cc cng vic theo lch biu, cc cnh bo li, cc s k ackup u c lu trong CSDL ny. V d: Khi bn to mt lch trnh cho vic backup d li d Procedure, tt c cc tc v ny u lu trong CSDL ny. Nu xa CSDL ny, bn phi ci g yu cu. 4- Tempdb: l ni lu tr cc thng tin tm thi ca cc hot ng trn SQL, v sp xp d liu. CSDL tempdb t khi to li mi khi SQL Server c khi ng li. 5- Pub bao gm cc tc gi, cc cun sch, v thng tin v vic bn sch. Hu ht cc tnh nng C 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, Micro nuted Transaction Coordinator (MS DTC). MSSQL Server : l RDBMS, x l cc pht biu Tran t-SQLv qun l cc file lu tr cc CSDL SQL Server Agent : dng lp lch thc hin t 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 trn hp Services, Tin ch Services Manager s c gng kt ni ti h v c cung cp bi SQL Server chn. Mi dch v s 1 trong V d MSSQLServer vn tip tc hot ng khi n tm dng, nhng cc -2 Trnh Enterprise Manager: ch cn my ch 3 trng kt ni

kt ni khng c xa. Combo S thi. Mt s d mi th khng

Enterprise Manager cung cp cc chc nng pht trin v qun tr SS bng giao din ha. xa, cp nht CSDL v cc i tng ca n. Qun l lch trnh Backup d liu Qun l n 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 c d liu t nhiu ngun khc nhau vo SQL Server hoc t SQL Server sang cc ngun khc. N php lp trnh xy dng nhng gi dch v chuyn i d liu. Management: Cho php bn th m nht k hot ng ca Server, qun l SQL Server Agent. Replication: cho php phn b d ase t mt CSDL n mt database n mt database khc. Typically, replication is used betw sically distributed servers. Security : cha cc chc nng iu khin tt c cc hot ng ca SQL Server. Support Services: cho php iu khin cc dch v khc c quan h vi SQL S tributed Transaction Coordinator, Full Text Search v SQL Mail cho php nhn e-mail t S QL 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 Qu thoi Connection to SQL Server: Combo SQL Server: chn tn my ch cha SQL Server hoc nhp (local) hay du . kt ni vi bn SQL Server cc b. Bn cng c th trng t SQL Server ca bn. Check Box Start SQL Server if stopped yu cu SQL Server t kh erver cha c khi ng. Bn cn cung cp thng tin kt ni: Nu ang lm vic trn my e SQL Server authentication vi Login Name l sa. Nu ang lm vic trn my Windows NT ni vi SQL Server chy trn Windows NT, bn c th chn Option Use Windows NT authenticat se SQL Server authentication kt ni ty thuc vo cch ci t ch c bo mt ca ng 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 nh L ang s dng Thng tin ng nhp Tn File truy vn ang m S ca ca s c hin o do this M ca s truy vn mi M mt file truy vn (.sql) Lu cc lnh vo file. M mt dung ca s Cch hin th kt qu truy vn: Result to text, result to grid, result to file tra c php. Thc hin truy vn. Kt thc truy vn. Hin th s nh gi tc thc hi L (Objects Browser) M hp thoi khai bo thuc tnh kt ni. Hin n khung cha kt qu tr -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 l me> . Transact-SQL Script l tp hp cc lnh c lu tr v thi hnh cng lc. Lnh Fil php m v lu mt truy vn (hoc tp hp cc truy vn). Theo mc nh, cc Sript c phn bng chut v n Shift-F1 m phn tr gip lin quan. Bn c th chy mt lnh trong c 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 t 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 b 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 t -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 c r chy trn Windows NT, Ngi Qun tr h thng c th ch nh n chy 1 trong 2 ch (Windows NT Authentication Mode): Khi User ch cn s dng ti khon ng nhp ca Windo vo mng l c th kt ni ti SS v cc ti nguyn khc trn mng. Ngi qun tr h thng o mi ti khon ngi dng hoc ti khon nhm ngi dng trn mng. SQL Server ci t tr Ch hn hp (Mixed Mode): Mt s User c th kt ni vi SQL Server vi xc nhn Windows dng xc nhn ca SQL Server (SQL Server Authentication) da trn Login Name v Password do 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 d uyn 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 . Cc pht biu ca n ch c thc hin trong mi trng SQL Server vi mc ch truy vn n h. T-SQL c cc pht biu c phn loi nh sau : Data Control Language (DCL): Cha c yn truy xut d liu. Data Definition Language (DDL): Dng to, sa xa cc i tng tr se, table, Index, Default, Procedure, Function, Schema, View, v Trigger, Data Man ipulation Language (DML): Cha cc lnh thm, sa, xo d liu Data Query Language (DQL) 1 pht biu SELECT dng truy vn d liu Cc thnh phn khc ca ngn ng nh kiu d li in v ch thch. CSDL s dng trong chng ny: a. KHUVUC(MaKV, TenKV, MaNVQL) b. NHANVIEN HoTenNV, Phai, LuongCB, CongViec, #MaKV) c. LOAIHANG(MaLH, TenLH) d. MATHANG(MaM H, 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 ytes) gi tr t -2^63 n 2^63-1 Int :(4 bytes) gi tr t -2^31 n 2^31 - 1. SmallInt : gi tr t 2^15 n 2^15 - 1. Tinyint : (1 byte) gi tr t 0 n 255. Lun l Bit : c gi S thc Decimal(n, d) : -10^38 +1 n 10^38 1. n <= 38; d mc nh bng 0 Numeric(n, d) : decimal. Tin t : Money : -2^63 n 2^63 - 1, chnh xc n 2 ch s sau du thp phn. ,748.3648 n +214,748.3647,vi chnh xc n 2 ch s sau du thp phn . S gn ng at[(n)] : -1.79E + 308 n 1.79E + 308. n c gi tr t 1 53, l s bt dng lu phn n -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- 9 , chnh xc 3/100 giy hay 3.33 nhy n. milliseconds. Smalldatetime : 1-1- 1900 n 6vi chnh xc l 1 pht. Chui k t (khng theo Unicode) - Character Strings Bao trong di c nh, ti a l 8000 k t. nhy n Varchar(n): di khng c nh, ti a l Chui k t Unicode - Unicode Character Strings Bao trong du nChar(n) : di c nh, t t. nhy n v phi nVarchar(n) : di khng c nh, ti a l 4000 k t. bt u bng N: Nsssss S nh phn - Binary Strings 0Xnnnn Binary(n) : di c nh (ti a 8000 byte ) : di thay i (ti a 8000 bytes). Image : di thay i (ti a 2^31-1 bytes). Oth sor : kiu con tr Sql_Variant : Nhn gi tr ca nhiu kiu d liu khc nhau trong SQL Se cc kiu text, ntext, timestamp, v sql_variant. Table : dng lu tr cc tp d liu cho l imestamp : kiu s (binary(8) hay varbinary(8)). Ct khai bo kiu ny s c t ng cp khi thm mt mu tin mi.. UniqueIdentifier : A globally unique identifier (GUID). Ch : K Text, nText, v Image khng dng cho bin cc b. Trc hng (Literals): bao gm hng s (N 1234.56 1234.56), hng vn bn (Text) v ngy gi trong cp du nhy n (V d. Nguyn H 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 dn UP BY <danh sch ct kha phn nhm>] [HAVING <iu kin chn nhm> ] [ORDER BY <danh sch ASC DESC ]] C php y ca pht biu Select kh phc tp. Chng ta s ln lt lm r -1 FROM CLAUSE :

Ch nh ngun d liu. truy vn thng tin t nhiu bng, S dng php kt gia cc bng able_source> <join_type> <table_source> ON <search_condition> <join_type>: Gm cc p hp 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_lis t>]

DISTINCT : Ch hin nhng dng c d liu phn bit.Mc nh cc dng trng d liu u NT] : ch hin n dng hoc n% dng u tin. n l s nguyn t 0 n 100. - WITH TIES: hin ca nhng ct kha sp xp trong mnh ORDER BY. - <column_list> ::= { * { table_name ame table_alias }.* column_name [ [AS] column_alias ] expression [ [AS] co lumn_alias ] column_alias = expression } [,...n] Du * : hin th tt c cc ct ca c TableName ViewName TableAlias }.* : Hin tt c cc ct ca bng ch nh. ColumnNam nmAlias : i tn ct trn bng ngun. Nu b danh c du cch hoc trng vi t kho ca S nhy n hoc du ngoc vung ([]) column_alias = expression hoc expression [AS] colum To ct tnh ton. Nu khng ch nh Column Alias th ct khng c tn. expression l dy nhau bi cc php ton (Operator): -a Cc php ton c th l: Cc php ton s hc: * (nh d); + (cng), - (tr). Th t u tin cao nht theo 3 cm t tri qua phi. Php ni chui th l: Tn thuc tnh (c th km theo tn bng v du chm ng trc). Hm (function). T s (Number - V d. 1234.56 1234.56), hng vn bn (Text) v ngy gi trong cp du nhy ) v hng lgic (True hay False); Gi tr NULL. Tn bin (Variable) -c Cc hm ton hc: AB yt i ca x SQRT(x) : Cn bc hai ca x SQUARE( x) : x2 POWER( y, x ) : yx LOG(x) : Logar 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 ROUND(x,n) : Lm trn ti n s l. CEILING( x) : S nguyn nh nht nhng ln hn x FLOOR(X ht nhng nh hn x ... v cc hm lng gic: SIN, COS, TAN, ASIN, ACOS, ATAN ... -d Cc h CSII( 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 RIM(str) : Tr v chui khng c du cch bn tri RTRIM(str) : Tr v chui khng c du c Ly n k t pha tri ca dy str. RIGHT(str,n): Ly n k t pha phi ca dy str. SUBSTR ): Ly n k t ca dy str k t v tr start trong dy. REPLACE(str1, str2, str3): thay th rong str1 bng str3. STUFF(str1, start, n, str2 ): Thay th n k t trong str1 t v tr st bng chui str2. STR( x, len [, Dec]): Chuyn s x thnh chui. -e Cc hm x l ngy thn ETDATE(): Cho ngy thng nm hin ti (Oracle: SYSDATE) DAY(dd): Cho s th t ngy trong t thc ngy dd. MONTH(dd): Cho s th t thng trong nm ca biu thc ngy dd. YEAR(dd): Ch 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 Minu te mi, n Second ss, s Millisecond Ms -f Cc hm chuyn i kiu gi tr: CAST(expression AS _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 , char, varchar, nchar, or nvarchar), Hoc dng chui m bn mun khi chuyn d liu kiu s eal, money, or smallmoney) sang kiu k t(nchar, nvarchar, char, varchar, nchar, or n varchar). Trong bng, 2 ct bn tri biu din dng gi tr datetime hoc smalldatetime chu aracter. Cng thm 100 cho gi tr style c dng nm 4 ch s. Without With century St tput** century (yy) (yyyy) 0 or 100 (*) Default mon dd yyyy hh:miAM (or PM) 1 10 1 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 V V

mon dd, yy hh:mm:ss mon dd yyyy hh:mi:ss:mmmAM (or PM) 110 USA mm-dd-yy V d: Selec t Conver(Char(8), GetDate(), 2) -- kt qu : 04.09.16 Gi tr Style chuyn kiu float ha l sang kiu k t. 0 (the default): Ti a 6 ch s, dng trong k hiu khoa hc. 1 lun lu trong k hiu khoa hc. 2 lun lun 16 ch s. Lun dng trong k hiu khoa hc.. In the fo , the column on the left represents the style value for money or smallmoney conv ersion to character data. 0 (the default) Khng du phy phn cch hng ngn; c 2 ch s t 4235.98. 1 C du phn cch hng ngn v 2 ch s thp phn; V d: 3,510.92. 2 Khng du p ch s thp phn. V d: 4235.9819. Mt s hm h thng: ISDATE(variable column name): K hp l. Tr v 1 nu hp l v 0 nu khng hp l. ISNUMERIC(variable column name): Kim v 1 nu hp l v 0 nu khng hp l. ISNULL(expression, value) : Tr v gi tr value nu NULL, ngc li tr v gi tr ca expression. Gi tr tr v cng kiu vi exoression. NUL r v gi tr NULL nu exp1 = exp2. COALESCE(exp1, exp2, .., expN) : tr v biu thc khc @@ROWCOUNT: Tr v s dng (kiu integer) tr v bi pht biu cui cng. d: cp nht d l OUNT xc nh s dng c thay i. UPDATE authors SET au_lname = Jones WHERE au_i IF @@ROWCOUNT = 0 print Warning: No rows were updated @@ERROR : Tr v m li (integ er) nu c ca pht biu T-SQL cui cng. Tr v s 0 nu khng c li. d: Dng @@ERROR r #547) trong pht biu cp nht. USE pubs GO UPDATE authors SET au_id = 172 32 1176 W HERE 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> d_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 C c: NOT, AND (conjunction), OR (disjunction). Kt qu cc php ton lgc l mt gi tr lg phm vi: IS [NOT] NULL [NOT] IN (<danh sch gi tr>) [NOT] BETWEEN <Min> AND <Max> [NO T] LIKE Mu v.bn --Dng k hiu thay th l du % v du (_ ) [NOT] EXISTS(SubQuery) : T nht 1 mu tin. 3.4 <php so snh> [<lng t>] (SubQuery): <Php so snh> c th l cc >=, <, <=, <>, =) hoc php ton tp hp IN, LIKE hoc NOT LIKE. <Lng t> c th l ALL . Php so snh = ANY c th c thay tng ng bng php ton IN; php so snh <> ALL c . 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 c iu ngy trong biu thc iu kin. S dng lnh : SET DATEFORMAT mdy dmy ymd ydm m -4 ORDER BY CLAUSE:

Mnh ORDER BY dng sp xp kt qu tm c. C php mnh ny l: ORDER BY <tnct> < [ASC DESC], ... -5 Tng hp d liu:

5.1 Cc hm tng hp: AVG( [Distinct] Column_name) Count( * ) Count([Distinct] Column_na me) Max(Column_name) Min(Column_name) Sum([Distinct] Column_name) V d: Cho bit s mt h g bn trong ngy cui cng: SELECT COUNT( DISTINCT MaMH) FROM HoaDon, CTHD WHERE HoaDon. gayHD 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 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 tt c cc ct khng tng hp c trong mnh SELECT. 5.3 HAVING CLAUSE: C php: HAVING < h 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 c WHERE <iu kin chn dng> ] [GROUP BY <danh sch ct kha phn nhm>] [HAVING <iu kin [ALL] SELECT <danh sch cc ct> FROM <bng ngun> [WHERE <iu kin chn dng> ] [GROUP BY ct kha phn nhm>] [HAVING <iu kin chn nhm> ] [ORDER BY <danh sch ct kha sp xp Ch : Cc kt qu truy vn phi cng s ct, cng th t v cng kiu d liu tng ng h ORDER BY ch cho php ng cui trong lnh UNION T kha ALL : dng ch nh hin th g 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 ( list) Chn d liu t cc bng : C php: INSERT INTO <table name> [(column list)] <SELECT ement> -2 SA D LIU: C php 1: UPDATE <table name> SET {<column name> = <value>} [,...n ] [FROM { < tabl e_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 M 0) + 100 , DonGia = DonGia * 2 WHERE MALH = 1 Cp nht s tn ca cc mt hng bn trong MatHang SET SoTon = SoTon - SL FROM CTHD, HoaDon , MatHang WHERE CTHD.SoHD = Hoa Don.SoHD And CTHD.MaMH = MatHang.MaMH AND HoaDon.NgayHD = (SELECT MAX(HoaDon.Nga yHD) FROM HoaDon) Cp nht tin Ha n ca cc ha n bn trong ngy UPDATE HoaDon SET Ti SUM(SL*DGBan) FROM CTHD WHERE HoaDon.MaHD = CTHD.MaHD) Where HoaDon.NgayHD IN (S ELECT MAX(NgayHD) FROM HoaDon) Tng n gi ca 10 mt hng c n gi thp. UPDATE MatHang 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 MatH 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 Fr MAHD = 1 And MaMH = 5 Xa cc CTHD ca cc ha n bn trong ngy Delete CTHD FROM CTHD ERE 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 MatHan g 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 tHang 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 l chnh (Primary data file): Mi CSDL ch c 1 file d liu chnh c phn m rng l MDF. econdary data files): Cc file ny cha cc d liu v i tng khng nm va trong Primar th ln n ni phi cn nhiu file d liu ph hay cn s dng cc file ph trn cc a ph tip theo nn c phn m rng l NDF. Cc file nht k (Log files): lu tr nht k g ion log) thc hin trn CSDL, nhm mc ch phc hi CSDL khi c s c. Khi s dng nhiu f t ng tri d liu qua tt c cc file d liu. iu ny lm gim tranh chp v cc im in, i vi file nht k, SQL khng tri thng tin trn cc file nht k. Khi 1 file nht vo file khc.

II- To CSDL: to CSDL bn c th dng cu lnh Create Database trong Query Analyzer hoc s dng tin anager. -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 Kyl oByte or Percentage>] ) Arguments Database_name : Tn Database phi c phn bit trn c r (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 Database tr thnh primary file. NAME = LogicalName : Tn lun l ca File lu tr CSDL ong cc pht biu ca T-SQL. Yu cu phn bit. FILENAME = FileName : Tn lu trn a. = <size MB or KB> : Kch thc File theo n v MB (mc nh) hoc KB. Thp nht 512 KB, m ZE = max_size : Ch nh kch thc ti a m file c th tng. Nu khng ch nh, kch th WTH : Khai bo s gia khi tng kch thc File, khng c ln hn MaxSize. Mc nh l 10% G ON : Khai bo cc file dng lu tr nht k thao tc trn database. Nu khng ch nh LO le nht k c size bng 25 percent ca tng kch thc ca tt c cc data files trn datab BanHang, bt u c kch thc 20MB trong , 15MB dnh cho file d liu v 5MB dnh cho TABASE 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 C SDL lu nhiu file. Theo Microsoft, File d liu u tin c phn m rng l MDF, cc fil l .NDF. Cc file nht k c phn m rng l LDF. CREATE DATABASE BanHang ON ( NAME = Sales_dat1, FILENAME = c:\data\sale.mdf , S IZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), ( NAME = Sales_dat2, FILENAME = c:\da ta\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, F ILEGROWTH = 5 ) Do khng dng t kha PRIMARY nn - 18 CREATE DATABASE BanHang ON ( NAME = Sales_dat1, FILENAME = c:\data\sale.mdf , S IZE = 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 thnh vin c vai tr sysadmin System Administrater v dbcreator Database Creators mi to Database mi. -2 Bng Enterprise Manager:

Click phi vo Folder Databases hoc khong trng trn khung bn tri, chn New Database, c L c hin th:

Tab General: Nhp tn Database trong Name, v d: TheThao. Tab Data Fiels : Database fil es: hin dng cha tn file d liu, v d: Thethao_Data, vi kch thc ban u l 1MB tro e properties: Check Box Automatically grow file: c chn cho php tng kch c file. K khng hn ch (Unrestricted filegrowth) hoc hn ch (Restrict filegrowth (MB)). Tab Transa tion 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 Server If Exists(Select True From master..SysDatabases Where Name = Thuvien) Drop D atabase 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 t s dng c php: ALTER DATABASE databasename ADD FILE <Thng tin File D Liu> [,...n] AD OG FILE <Thng tin file Log > [,...n] REMOVE FILE <Tn logic> MODIFY FILE <Thng t in file> Cc v d: A. Thm 1 file cha d liu cho database CREATE DATABASE Test ON ( FILENAME = C:\data\Testdat1.ndf , NAME = Testdat1, SI ZE = 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, FILENA ME = 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 VBng 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

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. lnh: Select * From Master.dbo.SysDatabases Ngoi ra, bn c th dng cc system stored pr dures 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, , ID, creation date, and status information.

SP_HELPDB database_name Hin th thng tin ca database c ch nh, gm : name, size, ow eation date, and status information. Ngoi ra cn cho bit chi tit cc file d liu v log . 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 o. USE TheThao Go EXEC SP_SPACEUSED V d 3: Xem kch thc table tblCLB USE TheThao Go EX EC 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 huc tnh Identity hay khng Column Name : Tn Field Data Type : Kiu d liu ca Field Siz h thc lu tr Allow Null : Cho php Null Default : Gi tr mc nh Identity : Field s c gi tr ban u l bao nhiu (Identity Seed) v s gia(Identity Increament) l bao nhiu. 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> lumnName 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 NEWI D(), cust_name char(30) NOT NULL) b) Khai bo rng buc : Co

C 2 loi khai bo RB: Khai bo RBTV trn mi ct: (Column Constraint) Sau li khai bo t 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 c tnh thng phi tm kim gi tr trn Non-Clustered: Sp xp d liu theo cc Field c loi ny. D liu v Index c lu 2 ni khc nhau . REFERENCES ref_table [(ref_column { CASCADE NO ACTION} ] [ ON UPDATE { CASCADE NO ACTION } ] CHECK (logical_ex pression) DEFAULT <Exp> : Gi tr mc nh ca ct trn mu tin mi IDENTITY [(seed, in Thng c dng khai bo cho ct kiu s nguyn, l kho chnh ca table. Ch nh gi tr mu tin khc. Trong : Seed -gi tr khi u v Increment - s gia. V d: CREATE TABLE ( MaSP SmallInt Identity (1,1) NOT NULL , TenSP varchar(30) NOT NULL, DonGia Mo ney Default 0, SoTon Real Default 0 ) ON PRIMARY Ch : Mi table ch c 1 ct mang thuc DENTITY. Hm IDENT_SEED(tablename) : tr v gi tr Seed, nu table khng c ct khai b o gi tr NULL. Hm IDENT_INCR(tablename) : tr v gi tr Increment. Hm @@IDENTITY ntity ca mu tin c chn cui cng. SQL Server t ng t tn cho mi RB. Tuy nhin, B STRAINT <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_LCBma x CHECK (LCBmax <= 250) ) /* ***************** publishers table **************** **** */ - 23 -

Lp trnh SQL Server

CREATE TABLE publishers ( pub_id char(4) NOT NULL CONSTRAINT UPKCL_pubind PRIMAR Y 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, stat e char(2) NULL, country varchar(30) NULL DEFAULT( USA ) ) Khai bo rng buc trn nhiu c ca Table: (Table Constraint) c khai bo ring, nm sau cc khai bo ct. Bao gm cc r AINT 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 CLU STERED, MaNCC SmallInt NOT NULL CONSTRAINT FK_DHH_NCC REFERENCES NHACC(MaNCC), N gayDH 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. Kh g tham gia vo kha ca bng. C php: ColumnName AS <Expression> V d : CREATE TABLE myta 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 b c th to table tm lu tr bn trong CSDL TempDB bng c php trn nhng s dng k hiu CREATE TABLE #MyTable ( Field1 int PRIMARY KEY, Field2 char(10) NOT NULL, Field 3 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. xut bi cc kt ni hin hnh

VIII- THAY I CU TR C BNG ALTER TABLE: Cc trng hp thay i cu trc bng, l: B sung thm ct mi (ADD Column); Xa ct; S v lnh hy b RBTV trn ct hay trn c bng. C php chung: ALTER TABLE table_name ALTER umn_name {data_type [(p[, s])] [NULL NOT NULL]} ADD {[<column_definition>] C olName AS Expression },... DROP COLUMN column [,...n] [WITH CHECK WITH NOC HECK] ADD {<table_constraint> }[,...n] DROP [CONSTRAINT] constraint_name {CH ECK NOCHECK} CONSTRAINT {ALL constraint_name[,...n]} {ENABLE DISABLE} TR IGGER {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 CHAR (25) Ch : Khng th sa ct : C kiu text, image, ntext, or timestamp Ct tnh ct tnh ton s dng trong cc rng buc ngoi tr ch thay i kch thc. Khng thay i kiu d liu ca ct, tr trng hp ct cha c d liu g. Khng th sa T NULL. -2 Thm ct

ALTER TABLE table_name ADD <nh ngha ct> [,...] V d: Thm vi ct c rng buc: CREATE CotA INT CONSTRAINT CotA_un UNIQUE) GO ALTER TABLE ViDu ADD /* Thm ct kha chnh */ C otB INT IDENTITY CONSTRAINT CotB_pk PRIMARY KEY, /* Thm ct tham chiu vi ct khc trn c able*/ CotC INT NULL CONSTRAINT CotC_fk REFERENCES ViDu(CotA), /* Thm ct vi rng buc d g 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][09]"), /* Thm ct vi gi tr mc nh */ CotE DECIMAL(3,3) CONSTRAINT CotE_defa DEFAULT .0 EXEC SP_HELP ViDu Ch : Trong trng hp Table c d liu, nu bn cn: Thm ct NOT bc: (i) thm ct vi thuc tnh NULL, (ii) in y cc gi tr cho ct, (iii) i l ct mi v in gi tr Default cho cc dng ang tn ti trong bng: Dng DEFAULT vi thu cp gi tr cho mi dng ang tn ti trong bng. ALTER TABLE MyTable ADD AddDate smalldat OT 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. 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 n] <TableConstraint>::= [CONSTRAINT UNIQUE ( Col1 [ ,...n ] ) FOREIGN ref_col [ ,...n ] ) [ ON DELETE { NO ACTION } ] DEFAULT <Exp> FOR TABLE SanPham - 26 WITH NOCHECK] ADD { <TableConstraint> }[,... constraint_name ] PRIMARY KEY( Col1 [ ,...n ] ) KEY ( Col1 [ ,...n ] ) REFERENCES ref_table ( CASCADE NO ACTION } ] [ ON UPDATE { CASCADE Col [ WITH VALUES ] CHECK( BT iu kin ) V d: ALTER

Lp trnh SQL Server

ADD CONSTRAINT SoTon_defa DEFAULT 0 FOR SoTon WITH NOCHECK: Khng kim tra rng buc i hng d liu ang c trn ct ALTER TABLE ViDu WITH NOCHECK ADD CONSTRAINT CotA_chk CHECK ( A > 1) GO ALTER TABLE CTDH WITH NOCHECK ADD CONSTRAINT SoLuong_chk CHECK (SoLuon g >=0) Ch : sa i RBTV, trc ht cn loi b (DROP) chng ri sau b sung RBTV m -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 Cot A_chk -- Reenable the constraint and try another insert, will fail. ALTER TABLE ViDu CHECK CONSTRAINT CotA_chk -7 COLUMN V d: SP_RENAME customers

IX- XA TABLE : C php:: V d: A. Xa table trong database hin hnh: DROP TABLE titles1 B. Xa table tro tabase khc : DROP TABLE pubs.dbo.authors2 Ch : Khng th xa Table cha c tham chiu b . DROP TABLE <tn bng> [, ] X-

I TN BNG: C php: EXEC SP_RENAME OldName , NewName V d: i tn table customers thnh custs. EX _rename customers , custs

XI- XA CC DNG TRN TABLE V GII PHNG V NG NH: C php: TRUNCATE TABLE <TableName> Ng ngha: Khc vi DELETE FROM <tn bng> c s dng hng vng nh trn b nh th cp (a t hoc vt mang tin t tnh khc) vn khng c gi b cc bn ghi khi bng th vng nh ca cc bn ghi ny s c thu hi v cho php cc b hoc nhng ngi qun tr CSDL mi c quyn hn TRUNCATE bng. - 27 -

i tn ct : SP_RENAME TableName.OldColName , NewColName , .[contact title] , title , COLUMN

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 y 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 SE LECT a.MaHD, NgayHD, SUM(SL*DG) FROM HoaDon a, CTHD b GROUP BY a.MaHD, NgayHD HA VING SUM(SL*DG) > 0 Go EXEC sp_helptext vwTienHD SELECT * FROM vwTienHD V d: CREAT E VIEW vwTienHD (MaHD, NgayLap, TienHD) AS SELECT a.MaHD, NgayHD, SUM(SL*DG) FRO M HoaDon a, CTHD b WHERE Year(NgayHD) =2004 GROUP BY a.MaHD, NgayHD HAVING SUM(S L*DG) > 0 Union SELECT a.MaHD, NgayHD, SUM(SL*DG) FROM HoaDon a, CTHD b WHERE Ye ar(NgayHD) =2005 GROUP BY a.MaHD, NgayHD HAVING SUM(SL*DG) > 0 Go EXEC SP_HelpTe xt 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 bi 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 WIT REATE 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, Ngay HD 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 Cc hn ch : Khng th s dng lnh INSERT hay DELETE trn View c s dng pht biu INN g INSTEAD OF Trigger) Khng th s dng lnh INSERT nu View c khai bo ct tnh ton ho buc NOT NULL m khng khai bo gi tr mc nh V d : CREATE VIEW vwCTHD (MaHD, MaMH, S SELECT MaHD, MaSP, SL FROM CTHD Where MaHD = 10248 Go Insert vwCTHD(MaHD,MaMH,So Luong) 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 kha N CREATE VIEW vwCTHD (MaHD, MaMH, SoLuong) AS SELECT MaHD, MaSP, SL FROM CTHD Wh ere MaHD = 10248 WITH CHECK OPTION Go UPDATE vwCTHD SET soluong = soluong + 10 I NSERT vwCTHD(MaHD,MaMH,SoLuong) VALUES(10248,1,20) /* lnh chn sau y s b li : The att ted 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 res ulting from the operation did not qualify under the CHECK OPTION constraint. INS ERT 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 ch to li n, bn phi cp li cc giy php cho n. Syntax ALTER VIEW ViewName [(column NCRYPTION] AS select_statement [WITH CHECK OPTION] -6 Xa View: DROP VIEW <view_name> V d: USE SieuThi Go IF EXISTS (SELECT TABLE_NAME FROM INFORM ATION_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 = 102 48 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 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 V d: SELECT MaNV, NgayHD, SUM(SL * DGBan) AS TienHD, COUNT(HoaDon.MaHD) AS SoHD FR OM HoaDon INNER JOIN CTHD ON HoaDon.MaHD = CTHD.MaHD WHERE (NgayHD = CONVERT(DAT ETIME, 1995-09-25 00:00:00 , 102)) GROUP BY MaNV, NgayHD WITH CUBE ORDER BY MaN V, NgayHD

c) WITH ROLLUP WITH ROLLUP tng t WITH CUBE, nhng ch tng hp tng nhm cc ct t tri 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 Mi Stored Procedure c th cha nhiu cu lnh SQL. Stored Procedure tng t nh cc th khc v chng c th: Cha cc pht biu v c th gi cc th tc khc (Nested) hoc . C th tr v cc gi tr tnh ton c trong th tc. Khi mun thc hin cc pht bi 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 PTION RECOMPILE , ENCRYPTION] AS [Danh Sch bin cc b] <sql_statement> GO -1 ENCRY

Bin cc b : a) Khai bo bin cc b: Trong T-SQL, bin cha gi tr trung gian phi c khai bo trc VarName data_type [,...n] ca n. Tt c cc bin cc b phi bt u bng k hiu @ tr

Phm vi bin: Bin khai bo trong mt strored procedure hoc mt gi lnh ch kh dng b n. Trong T-SQL khng c khi nim bin ton cc. V d: DECLARE @Counter int DECLARE @Fi char(25) Hay khai bo trn cng dng: DECLARE @FirstName varchar(25), @Counter int Sau k hi khai bo bin c gi tr NULL b) Gn gi tr cho bin cc b: Cch 1: SET @VarName = <Ex 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 reco g s c gn cho bin. DECLARE @intMaNV int SELECT @intMaNV = 5 + 6 SELECT @intMaNV = MAX( aNV) FROM SieuThi..NhanVien Nu SELECT tr v nhiu dng, th bin c gn gi tri t d t. T-SQL c tnh nng t ng chuyn kiu. Do , c kh nng b mt d liu. Bn c th 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 c du phy. Khng dng Kiu hnh nh. Nu cung cp gi tr mc nh cho tham s, th c th tham s. V d: To Stored Procedure Chn 10 mt hng c n gi cao nht gm cc ct: Tn EATE PROCEDURE MuoiMHCaoNhat AS SET ROWCOUNT 10 SELECT MatHang.TenMH , MatHang.D onGia FROM MatHang ORDER BY MatHang.DonGia DESC Go SET ROWCOUNT { n @number_va r } Ch chn n dng u tin khi rt trch d liu.. b ch nh ny v cho hin ht cc tc tr v n mt hng u tin c n gi cao nht: CREATE PROCEDURE MuoiMHCaoNhat @n small ROWCOUNT @n SELECT MatHang.TenMH , MatHang.DonGia FROM MatHang ORDER BY MatHang .DonGia DESC Hay CREATE PROCEDURE MuoiMHCaoNhat @n smallint = 10 AS Exec ( SELEC T Top + @n + MatHang.TenMH , MatHang.DonGia FROM MatHang ORDER BY MatHang.Do nGia 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) (Select + @str + ) -3 ;number:

Dng nhm cc th tc c cng tn v phn bit nhau bi s th t number. Khi , tn ca t ;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 MuoiMHCa -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: Phi lit k theo th t t tri sang phi. Ch c th b qua nhng tham s gn gi tr mc nh, Bn c th b qua tham s 4 v 5 nhng khng th b qua 4 v gn tr cho 5. [EXE T] [,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 Se lect @Avg = (@A + @B) / 2 Go nhn gi tr Avg: u tin bn phi khai bo mt bin, sau re @KQ smallint EXEC spTBCong @KQ OUTPUT, 10 Select The Average Score is : , @KQ H ay Declare @KQ smallint EXEC spTBCong @A = 10, @B = 9, @AVG = @KQ OUTPUT Select T he 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 - 34 -

Lp trnh SQL Server

SELECT Top 1 With Ties MatHang.TenMH , MatHang.DonGia FROM MatHang ORDER BY MatH ang.DonGia DESC Return @@RowCount nhn gi tr Return: u tin bn phi khai bo mt bi Declare @SoMT smallint EXEC @SoMT = MHCaoNhat Select So Mat Hang : , @SoMT Go Ch : K hi thc hin 1 cu lnh SQL hay Stored Proc c tham s, tt c cc du nhy n () dng 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 l eo 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 Ye ar(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 xc nh kt qu. CASE input_expression WHEN when_expression THEN result_expression [ . ] [ELSE else_result_expression ] END V d: Simple Case Create Proc spr_ThuTrongTua n (@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. ssion 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, 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 ng ay 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 ngc li. WHILE <boolean expression> BEGIN <Cc pht biu T-SQL> [CONTINUE] [BREAK] END V To th tc tnh tng S = 1 + 3 + 5 + + (2N-1) Create Proc TongLe ( @N int ) AS DECLARE @ 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 i nt Exec @s = tongle 3 print Tong la : + @s Pht biu WAITFOR : WAITFOR DELAY <time> IME <time> Khi s dng WHILE, c th dng thm lnh WAITFOR vi thi gian cho trc. Tham khon thi gian ch nht nh. Thi gian tnh bng h:m:s, ln nht l 24 gi. Tham s TIM 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 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] <t -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 t hng bo v li xy ra. kim tra li bn s dng hm @@Error. tr v thng tin v error. 1- Hm @@ERROR Hm @@ERROR cha m li cho pht biu va thc hin. N t ng xa v . Gi tr 0 nu pht biu thnh cng. Bn c th dng hm @@ERROR xc nh m li hoc l gy lp l ch nht th chuyn thnh ngy th 2 CREATE PROC spThemHD ( @MaHD SmallInt, @Nga lDateTime ) As If (IsDate(@NgayLap) = 0) Return 0 If DatePart(w, @NgayLap) = 1 S et @NgayLap = @NgayLap + 1 Insert Into HoaDon(MaHD, NgayLap) Values(@MaHD, @Ngay Lap) 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 R ( { msg_id msg_str } { , severity , state } [ , argument [ ,...n ] ] ) [ WIT H option [ ,...n ] ] Arguments o msg_id: M s > 50000 ca dng thng bo do ngi dng to sysmessages bng th tc sp_AddMessage o msg_str: Ni dung thng bo li cn xut. . o sev M s ch nh mc nghin trng ca li. Mc t 0-19 c xem nh l thng tin phn h lbo co trng thi. Mc t 11 - 16 l nhng li c th c hiu chnh bi user. Mc t 20 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 hng li. Gi tr ph nhn ca state l 1. o Argument: L tham s dng thay th vo nhng b g_str hoc thng bo tng ng vi msg_id. Mi tham s thay th c th l 1 bin cc b ho 2, 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 RROR. Mc nh @@ERROR c t bng 0 cho cc li c severity t 1 n 10. 3- Thm Thng b Dng th tc sp_addmessage thm vo bng sysmessages. . sp_AddMessage @msgnum = msg_id verity = severity , @msgtext = msg [ , @lang = language ] [ , @with_log = T rue False ] [ , @replace = REPLACE ] msg_id: phi c gi tr t 50.001 tr ln. REPLA ch nh lnh s thay th msg_id nu msg_id c trong bng. Example: USE master EXEC sp_ @msgnum = 60000, @severity = 16, @msgtext = Kiu d liu khng hp l , @lang = us_engli @with_log = true -b xa thng bo li : s dng sp_dropmessage sp_DropMessage @msgnum _id Ch thch Comments C 2 cch ch thch: ch thch trn cng dng lnh hoc ch thch g dng vi mt pht biu - In-Line Comments S dng 2 du tr (--) trc li ch thch. Ch k 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 l cc lnh trong Transaction v phc hi li ton b d liu b thay i bi cc lnh tron i 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 on. Tuy nhin nn t tn Transaction d c. Xc Nhn Kt Thc Thnh Cng Mt Chuyn T ION] [transaction_name] nh du v tr trong chuyn tc: Lu v tr chuyn tc Syntax: SAV N] <save_name> -b -c -d

Kt thc khng thnh cng mt chuyn tc: Khi gp lnh ny, tt c nhng lnh c thc hi in Tran hoc t v tr nh du trong chuyn tc s b bi b Syntax: ROLLBACK TRAN[SACTION name] [save_name] V d : To SP thm mt sinh vin mi trong table SinhVien v thm vo Detai MSDT m sinh vin thc hin. Nu MSDT khng tn ti ch b thao tc chn mu tin mi i. 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) ROLLBAC K 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, COM ON, or ROLLBACK TRANSACTION u l Explicit Transaction. Bn c th thc hin mt Implicit tion bng cch khai bo : Syntax: SET IMPLICIT_TRANSACTIONS {ON OFF} Khi t ch Impli ransaction l ON, Cc pht biu sau y s t ng bt u mt Transaction: o SELECT, INSER o ALTER TABLE o TRUNCATE TABLE o OPEN, FETCH o GRANT, REVOKE Khi t ON, th cui cc Tr csaction cn phi c lnh Commit hoc Roll Back. Nu khng th cc lnh trong Transaction v y i s b b qua khi ngi dng kt thc kt ni. Nu ci t l OFF (default). Mi pht

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 3 pht biu Insert, Update, Delete thay i d liu trn table . Trigger khng c gi t ham s v gi tr tr v nh SP. Trigger ch c thc hin khi pht biu cp nht tho chnh ca triggers l chng c th cha cc x l phc tp trn cc table c d liu lin gger c th cha pht biu ROLLBACK TRAN ngay c khi khng c pht biu BEGIN TRAN. Trong t ROLLBACK TRANSACTION bn trong 1 Trigger c thc hin: Nu trigger ny c kch hot trong mt transaction khc, th ton b Transaction b bi b. Nu trigger c kch trong mt gi, th s bi b ton b gi. Da vo ng dng ca Trigger, c 3 loi Trigger n Update Trigger; Delete Trigger -2

To Trigger cho Table: C php To Trigger: CREATE TRIGGER <trigger_name> ON <table name> [WITH ENCRYPTION] A FTER FOR DELETE, INSERT, UPDATE AS <Cc pht biu T-sql> trigger_name : Tn Trigger ph phn bit. ON <tablename> : tn table m Trigger s thc hin. Khng s dng Trigger cho - 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 igger. Khi thc hin Trigger, SQL s to cc bng tm: INSERTED v DELETED o Khi Insert mu vo Table th mu tin mi cng lu trong table INSERTED o Khi Delete mu tin trong table tin b xo c di chuyn sang table Deleted. o Khi Update mu tin trong table: th tab Inserted u cha mu tin c ni dung mi, cn Deleted cha mu tin c ni dung c. Bn kh table DELETED V INSERTED. Nhng bn c th dng 2 table ny x l cc mu tin trn cc ra, trong trigger Insert v Update, bn c th thay i ni dung ca cc mu tin mi bng l able c trigger. AS : T kha bt u cc hnh ng bn trong Trigger. Trigger c th ch ngoi tr mt s lnh sau: Cc lnh CREATE, ALTER, and DROP. TRUNCATE TABLE SELECT IN se it creates a table) Ch : Ch ca table v nhng thnh vin c Role db_owner, db_ddla sadmin c th to v xo triggers. Cc permissions khng th sang nhng. Hn na, ngi t hc hin tt c pht biu trn cc tables. Triggers khng th to view v table tm (temp g chng c th tham chiu n cc views v temporary tables. Cc lnh INSERT, UPDATE, ho ng trn nhiu dng. bit c s dng b tc ng, s dng hm @@ROWCOUNT bn trong T d liu: V d: Khi xa hay thay i MSGV trong GIAOVIEN_HD, nu gio vin l ch tch te 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) Begi n Raiserror( Khong xoa hay thay doi giao vien CTHD ,16,1) RollBack Tran End Kim t ra 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 g_ThemHDDT On Hoidong_DT For Insert, Update As If (Select Count(a.mshd) From Hoi Dong_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 Crea 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 g io vin khng th va l gio vin phn bin va l gio vin hng dn ti. Ch : Bn o cng mt hnh ng. Khi th t thc hin cc trigger c xc nh da trn th t SP: Sp_SetTriggerOrder sp_SetTriggerOrder trg_UpdateAction2, First, Update sp_SetT riggerOrder trg_UpdateAction1, Last, Update SP ny ch c th ch nh trigger no c t r 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 k h Insert, Update, Delete cp nht d liu trn View. Trong phin bn 2000, bn c th c g ngun ca View bng tn ca View. Trng hp bn mun dng 1 lnh, cp nht trn nhiu b igger 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 TE. Cc Trigger INSTEAD OF s thc hin trc cc AFTER triggers ci t cho cc Table V nh sch ti v sinh vin thc hin ti CREATE VIEW vwSVDeTai AS SELECT A.MSDT, A.T ULLIF(C.TENSV, NULL) As TENSV FROM DETAI A INNER JOIN SV_DETAI B ON A.MSDT = B.M SDT INNER JOIN SINHVIEN C ON B.MSSV = C.MSSV thm ti mi trong table DeTai v sinh v hin ti trong table SV_DeTai, thay v thc hin 2 lnh Insert trn tng Table, bn c g qua i tng View to. INSERT vwSVDeTai(msdt, Tendt, mssv) Values( 97014, Ma Hoa Du u , 01th01 ) lm c iu ny, bn phi to Trigger Instead Of Insert cho View CREATE VDeTai 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. ENSV, NULL) As TENSV trnh trng hp li TenSV khng c NULL v lc ny TenSV l mt -4

Kim Tra Ct c Cp Nht : Hm Update(<Column Name>) : Dng kim tra <Column Name> c c cp nht d liu hay khng. date(): Tr v cc Byte cho bit nhng ct no c cp nht. Mi Bit trong cc Byte ny theo th t t tri qua phi. Ct no c cp nht th Bit tng ng c gi tr 1. S dng (Bitwise Exclusive OR), & (Bitwise AND), (Bitwise OR) -5 -6 Disabling or Enabling a Trigger: ALTER TABLE table ENABLE DISABLE TRIGGER ALL Hiu chnh Trigger: trigger_name[,n]

Bn c th thay i cc lnh cn thc hin cng nh hnh ng cp nht m Trigger s c g e -7

Xa Trigger: DROP TRIGGER {trigger} [,n] Nu xa mt table th tt c Triggers ca n cng b xa. Quy 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 b bn c th s dng cc pht biu Update hoc Delete cp nht hay xa mu tin hin hnh t 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 <cur sor_name> Sau lnh m cursor, con tr mu tin hin hnh nm vng BOF. X l mu tin trn mu tin hin hnh: FETCH NEXT FROM cursor_name S dng pht biu Update hoc Delete cp tin hin hnh ng cursor: CLOSE <tn cursor> Hy b cursor: DEALLOCATE <TN CURSOR> V d nh Create Proc Sc_DienSBD As Declare @I Int --Khai bo bin Con tr Declare Cursv Curs or 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 Upd ate 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 SCR OLL ] -- 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 hi bn ng v gii phng Cursor. Nu bn m Cursor cha ng th s b li v c khi b tr khng s dng Cursor Global, bn nn ng v gii phng Cursor. Nu bn mun to cursor Loc ong khai bo cursor: Declare Cursv Cursor Local For Select Sbd, Tensv From Sinhvie n Order By Tensv Cursor Local c phm vi hot ng bn trong gi to n. V t gii phn -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 . 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 Khi to Cursor Static, d liu t cc bng gc s c Copy sang mt bng tm trong CSDL te e ngun ca Cursor b thay i d liu th cc d liu khng xut hin trn Cursor. Server: 6, 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 T OF <tnCursor> trong cc pht biu UPDATE or DELETE), v t ng hin th tt c nhng th Tuy nhin, d liu v th t ca cc mu tin trong tp mu tin c th b thay i. KEYSET . Nhng n ch c to khi bng ngun c khai bo kha, nu khng th SQL t ng chuyn s KEYSET, Tp cc kha ca bng ngun c lu trn mt table ca CSDL tempdb. Do , vic x trn cc bng ngun khng thng qua Cursor s khng phn hi trn tp mu tin. Cursor kiu v DYNAMIC mc nh dng phng thc SCROLL. TYPE_WARNING : Gi thng bo ch v client n yn 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 U thay i bi ngi dng khc? Ph thuc vo kiu Cursor m bn s dng, bn khng th nh v m li n. Tr phi s dng cursor trong mt transaction, nu khng cc table ngun ca d liu. SQL Server 2000 c 4 chn la cho php ngn cn vic sa i mu tin cho ti khi cch kha cc table ngun ca cursor bo v cc thay i ca bn. READ_ONLY : Dng khi 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 g bo li. OPTIMISTIC WITH ROW VERSIONING Khi mun c dng c cp nht, khng ch mt -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 UPDATE m khng ch nh danh sch ct, th tt c cc ct u c kh nng cp nht tr ph

III- Truy xut d liu trn Cursor: FETCH [ NEXT PRIOR FIRST LAST ABSOLUTE { n @nvar } RELATIVE { n @n var } ] FROM [ GLOBAL ] cursor_name [ INTO @variable_name [ ,...n ] ] o NEXT : C huyn sang mu tin k tip. o PRIOR : Chuyn v mu tin trc . o FIRST : Chuyn v mu t huyn n mu tin cui cng. o ABSOLUTE {n @nvar} : Nu n or @nvar > 0, tm n dng th ung trong tp mu tin. Nu n or @nvar < 0, tm n dng th n tnh t dng cui cng m l huyn n vng BOF v khng c gi tr tr v. Hng s n phi l s nguyn v bin @nvar ph hoc int. Khng s dng phng thc ABSOLUTE cho kiu DYNAMIC. o RELATIVE {n @nvar} : Nu nvar > 0, chuyn xung n dng tnh t dng k di dng hin hnh. Nu n or @nvar < 0, Chuy hnh. Nu n or @nvar = 0, tr v dng hin hnh. o cursor_name: Tn cursor ang m. Nu t b v cursor ton cc c cng tn th tn cursor c s dng s l cursor cc b nu khng [,...n] : Danh sch bin cc b nhn d liu tng ng t cc ct trn mu tin hin hnh, t phi bng s ct lit k trong cu lnh Select khi to Cursor. Kiu d liu ca mi bi hoc c h tr chuyn kiu ngm nh theo kiu ca ct. Kim tra kt qu ca lnh FETCH: h FETCH. Hm tr v mt trong 3 gi tr: 0 Nu lnh FETCH chuyn n 1 mu tin trong danh s TCH chuyn n vng BOF hoc EOF -2 Nu chuyn n 1 dng b xa trn Server (Keyset). V r As Declare @ms char(6), @ten varchar(30) Declare a cursor SCROLL for select ms sv, 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 End Close a Deallocate a GO - 49 -

- + @ten Fetch Next from a into @ms

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 mt ti khon ng nhp (login) SQL Server cho User, thm User vo CSDL v gn quyn cho Us Bao gm cc loi quyn: Quyn truy cp vo SQL Server Quyn truy xut CSDL Quyn thc 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 DL mc nh.

Ch : ng nhp vi SQL Server thng dng cho vic kt ni quay s v mng peer-topeer. ( es: Chn vai tr qun tr mc Server cho ti khon ng nhp System Administrators c quy hp thc hin mi tc v trn SQL Security Administrators Qun l cc server logins. Server rators Cho php bn nh cu hnh nhng ci t server-wide. Setup Administrators Cho php ked servers, v truy xut vi SP Database Creator To v hiu chnh databases. Disk Adminis tors Qun l cc files trn a. Process Administrators Qun l tin trnh ang chy trong 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 Database Access: Chn CSDL c php truy xut v vai tr ca n trong tng CSDL c chn le Description Public Vai tr chung cho tt c ngi dng. db_owner Quyn cao nht trong da e. db_accessadmin iu khin truy xut, ci t hoc xa user accounts. db_datareader c t tabase. db_datawriter Thm, sa, xa d liu trn cc tables ngi dng trong database. db_ Thm, sa, xa cc i tng objects (runs all DDLs). db_securityadmin Qun l cc roles, c ole, giy php trong database. db_backupoperator Cho php back up database. db_denydat areader T chi quyn truy vy d liu trong database. db_denydatawriter T chi quyn thay ong database. Sau khi to login, n t ng nhp vo tp Users ca mi database c chn, Login. Bn c th thay i thu hi vai tr ca n trn tng CSDL bng cch sa i thuc t rs ca database v thay i thuc tnh hoc xo user no m bn khng mun cho truy xut da 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 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 quyn truy cp d liu trn tng Table, View. Quyn rential Integrity). Quyn thc hin cc th tc lu ble A c cp quyn Update hoc Insert. Table A c yn 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 -

cn hiu chnh (Login-ID). Click nt Pe kim tra RB tham chiu (DRI - Declarati tr. Ch thch: Quyn kim tra RB tham RB FOREIGN KEY vi table B, m table B

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 b ogin 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 c

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 > [ , @defdb = ] < TnCSDL > [ , @deflanguage = ] < Ngnng > [ , @sid = ] < M nhn dng Login > [ , @encriptopt = skip_encription ] o @defdb : tn CSDL mc nh i ng nhp. Nu khng ch nh mc nh l CSDL Master. o @deflanguage : Ngn ng mc nh : M nhn dng ca h thng. Nu khng ch nh, h thng t to mt m s mi. o @encript d s c m ha khi lu trong cc table h thng. Ngoi tr bn gn gi tr skip_encryptio tr v gi tr 0 nu thnh cng, ngc li tr v gi tr 1. V d: To ti khon tn myna eTai Sp_AddLogin user01 , 01 , QLDeTai Kt qu tr v : New loigin created -b Cp quy kt ni cho User hay nhm User ca Windows kt ni n SQL Server: SP_GRANTLOGIN [@loginam login Login : <Domain> <Computer name>\<tnnhm>

V d: Thm ti khon cho user Windows NT [Server4\User01] kt ni n SQL Server. EXEC sp_ gin Server4\User01 Hay EXEC sp_grantlogin [Server4\User01] Ch : Ch c thc hin bi h 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

[ [, @name_in_db = ] TnUser ] V d: Use

-4 V d: Sp_RevokeDBAccess Anh

-5 Cp quyn thc thi trn CSDL:

Bao gm cc quyn: Select, Insert, Update, Delete, Reference, Excecute. GRANT ALL <q uyn> [,] ON <TnTable View>[(<tnct>,..)] <tnSP> TO <tn Login hoc Role> [,] [WITH PTION] [AS <tn Role> ] o All : Cp tt c cc quyn thc thi Select, Insert, Update, Delet ay Reference trn table hay view; quyn Excecute cho SP. o TO <tn Login hoc Role> : Kh i cp quyn cho nhm hay user ca Windows NT, phi ch nh: <Domain> <Computer name>\<tnn yn cho nhm cc b Windows NT built-in, dng t kha BUILTIN thay th tn domain hoc comp . Quyn thc thi cp cho role Public c p dng cho tt c users trong CSDL. Quyn th uest c s dng cho tt c Users khng c phn quyn truy xut trn CSDL. V d: USE QL i To User01 GO GRANT SELECT ON DeTai TO public GO GRANT INSERT, UPDATE, DELETE O N DeTai TO Mary, [Corporate\BobJ] GO o WITH GRANT OPTION : Cho php Login cp quyn ch trn i tng cho Login khc. o AS {group role} : c dng khi quyn thc thi trn mt , v mt User ca nhm hoc Role mun cp quyn thc thi cho User khc khng l thnh vin table NhatKy c to bi user Lac. Lac cp quyn SELECT table NhatKy cho Role BanBe vi m GRANT OPTION cc user thnh vin ca Role BanBe c th nhng quyn ny cho cc user kh nBe. User Hong, l thnh vin ca BanBe, mun nhng quyn SELECT table NhatKy cho user Kho g l thnh vin ca role BanBe. /* User Lac */ GRANT SELECT ON NhatKy TO BanBe WITH GRAN T OPTION /* User Hong */ - 53 -

Xa quyn truy xut CSDL hin hnh: Sp_RevokeDBAccess [ @name_in_db = ] TnUser

Cp quyn Truy xut CSDL Hin Hnh cho Login: Sp_GrantDBAccess [ @loginname = ] Tnngnhp DeTai Go sp_GrantDBAccess user01 , Anh

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 vi ew [ ( column [ ,...n ] ) ] ON stored_procedure TO <tn Login hoc Role> [,] [Casca de] V d: USE QLDeTai GO GRANT SELECT ON DeTai TO public GO DENY SELECT, INSERT, UP DATE, 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 { st ored_procedure extended_procedure } ON { user_defined_function } TO FROM s ecurity_account [ ,...n ] [ CASCADE ] [ AS { group role } ] V d : Xa b quyn Select 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; CR DEFAULT; CREATE PROCEDURE; CREATE RULE; CREATE TABLE; CREATE VIEW; BACKUP DATABA SE; 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 T ABLE 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 Ch cc quyn qun tr SQL Server o Vai tr trn Database: Cha cc quyn qun l v thc thi t goi 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 dd 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 SEL ECT 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_GRANTDB CCESS Server4\User01 , Hong GO EXEC SP_ADDROLEMEMBER QuanLy , Hong - 55 -

You might also like