You are on page 1of 61

HC SQL SERVER 2000

MC LC

Overview of SQL Server 2000 ........................................................................................... 2 Transact SQL ...................................................................................................................... 7 Backup And Restore SQL Server ..................................................................................... 24 Stored Procedure and Advanced T-SQL........................................................................... 41 Triggers And Views.......................................................................................................... 51

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

Overview of SQL Server 2000


c v hiu bi vit ny bn phi c kin thc cn bn v SQL v Access Database

Gii Thiu SQL Server 2000


SQL Server 2000 l mt h thng qun l c s d liu (Relational Database Management System (RDBMS) ) s dng Transact-SQL trao i d liu gia Client computer v SQL Server computer. Mt RDBMS bao gm databases, database engine v cc ng dng dng qun l d liu v cc b phn khc nhau trong RDBMS. SQL Server 2000 c ti u c th chy trn mi trng c s d liu rt ln (Very Large Database Environment) ln n Tera-Byte v c th phc v cng lc cho hng ngn user. SQL Server 2000 c th kt hp "n " vi cc server khc nh Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server.... SQL Server c 7 editions:

Enterprise : Cha y cc c trng ca SQL Server v c th chy tt trn h thng ln n 32 CPUs v 64 GB RAM. Thm vo n c cc dch v gip cho vic phn tch d liu rt hiu qu (Analysis Services) Standard : Rt thch hp cho cc cng ty va v nh v gi thnh r hn nhiu so vi Enterprise Edition, nhng li b gii hn mt s chc nng cao cp (advanced features) khc, edition ny c th chy tt trn h thng ln n 4 CPU v 2 GB RAM. Personal: c ti u ha chy trn PC nn c th ci t trn hu ht cc phin bn windows k c Windows 98. Developer : C y cc tnh nng ca Enterprise Edition nhng c ch to c bit nh gii hn s lng ngi kt ni vo Server cng mt lc.... y l edition m cc bn mun hc SQL Server cn c. Chng ta s dng edition ny trong sut kha hc. Edition ny c th ci trn Windows 2000 Professional hay Win NT Workstation. Desktop Engine (MSDE): y ch l mt engine chy trn desktop v khng c user interface (giao din). Thch hp cho vic trin khai ng dng my client. Kch thc database b gii hn khong 2 GB.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000


Win CE : Dng cho cc ng dng chy trn Windows CE Trial: C cc tnh nng ca Enterprise Edition, download free, nhng gii hn thi gian s dng.

Ci t SQL Server 2000 (Installation)


Cc bn cn c Developer Edition v t nht l 64 MB RAM, 500 MB hard disk c th install SQL Server. Bn c th install trn Windows Server hay Windows XP Professional, Windows 2000 Professional hay NT Workstation nhng khng th install trn Win 98 family. V mt trong nhng c im ca cc sn phm Microsoft l d install nn chng ti khng trnh by chi tit v cch install hay cc bc install m ch trnh by cc im cn lu khi install m thi. Nu cc bn gp tr ngi trong vic install th c th a ln forum hi thm. Khi install bn cn lu cc im sau: mn hnh th hai bn chn Install Database Server. Sau khi install xong SQL Server bn c th install thm Analysis Service nu bn thch. mn hnh Installation Definition bn chn Server and Client Tools. Sau bn nn chn kiu Custom v chn tt c cc b phn ca SQL Server. Ngoi ra nn chn cc gi tr mc nh (default) mn hnh Authentication Mode nh chn Mixed Mode . Lu v SQL Server c th dng chung ch bo mt (security) vi Win NT v cng c th dng ch bo mt ring ca n. Trong Production Server ngi ta thng dng Windows Authetication v an ton cao hn v d dng cho ngi qun l mng v c cho ngi s dng. Ngha l mt khi bn c chp nhn (authenticated) kt ni vo domain th bn c quyn truy cp d liu (access data) trong SQL Server. Tuy nhin ta nn chn Mixed Mode d dng cho vic hc tp. Sau khi install bn s thy mt icon nm gc phi bn di mn hnh, y chnh l Service Manager. Bn c th Start, Stop cc SQL Server services d dng bng cch double-click vo icon ny.

Mt cht kin thc v cc Version ca SQL Server


SQL Server ca Microsoft c th trng chp nhn rng ri k t version 6.5. Sau Microsoft ci tin v hu nh vit li mt engine mi cho SQL Server 7.0. Cho nn c th ni t version 6.5 ln version 7.0 l mt bc nhy vt. C mt s c tnh ca SQL Server 7.0 khng tng thch vi version 6.5. Trong khi

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

t Version 7.0 ln version 8.0 (SQL Server 2000) th nhng ci tin ch yu l m rng cc tnh nng v web v lm cho SQL Server 2000 ng tin cy hn. Mt im c bit ng lu version 2000 l Multiple-Instance. Ni cho d hiu l bn c th install version 2000 chung vi cc version trc m khng cn phi uninstall chng. Ngha l bn c th chy song song version 6.5 hoc 7.0 vi version 2000 trn cng mt my (iu ny khng th xy ra vi cc version trc y). Khi version c trn my bn l Default Instance cn version 2000 mi va install s l Named Instance.

Cc thnh phn quan trng trong SQL Server 2000


SQL Server 2000 c cu to bi nhiu thnh phn nh Relational Database Engine, Analysis Service v English Query.... Cc thnh phn ny khi phi hp vi nhau to thnh mt gii php hon chnh gip cho vic lu tr v phn tch d liu mt cch d dng.

Relational Database Engine - Ci li ca SQL Server: y l mt engine c kh nng cha data cc quy m khc nhau di dng table v support tt c cc kiu kt ni (data connection) thng dng ca Microsoft nh ActiveX Data Objects (ADO), OLE DB, and Open Database Connectivity (ODBC). Ngoi ra n cn c kh nng t iu chnh (tune up) v d

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

nh s dng thm cc ti nguyn (resource) ca my khi cn v tr li ti nguyn cho h iu hnh khi mt user log off. Replication - C ch to bn sao (Replica): Gi s bn c mt database dng cha d liu c cc ng dng thng xuyn cp nht. Mt ngy p tri bn mun c mt ci database ging y ht nh th trn mt server khc chy bo co (report database) (cch lm ny thng dng trnh nh hng n performance ca server chnh). Vn l report server ca bn cng cn phi c cp nht thng xuyn m bo tnh chnh xc ca cc bo co. Bn khng th dng c ch back up and restore trong trng hp ny. Th th bn phi lm sao? Lc c ch replication ca SQL Server s c s dng bo m cho d liu 2 database c ng b (synchronized). Replication s c bn k trong bi 12 Data Transformation Service (DTS) - Mt dch v chuyn dch data v cng hiu qu Nu bn lm vic trong mt cng ty ln trong data c cha trong nhiu ni khc nhau v cc dng khc nhau c th nh cha trong Oracle, DB2 (ca IBM), SQL Server, Microsoft Access....Bn chc chn s c nhu cu di chuyn data gia cc server ny (migrate hay transfer) v khng ch di chuyn bn cn mun nh dng (format) n trc khi lu vo database khc, khi bn s thy DTS gip bn gii quyt cng vic trn d dng nh th no. DTS s c bn k trong bi 8. Analysis Service - Mt dch v phn tch d liu rt hay ca Microsoft D liu (Data) cha trong database s chng c ngha g nhiu nu nh bn khng th ly c nhng thng tin (Information) b ch t . Do Microsoft cung cp cho bn mt cng c rt mnh gip cho vic phn tch d liu tr nn d dng v hiu qu bng cch dng khi nim hnh khi nhiu chiu (multidimension cubes) v k thut "o m d liu" (data mining) s c chng ti gii thiu trong bi 13. English Query - Mt dch v m ngi Vit Nam chc l t mun dng :-) (?) y l mt dch v gip cho vic query data bng ting Anh "trn" (plain English). Meta Data Service: Dch v ny gip cho vic cha ng v "xo nu" Meta data d dng hn. Th th Meta Data l ci g vy? Meta data l nhng thng tin m t v cu trc ca data trong database nh data thuc loi no String hay Integer..., mt ct no http://ebooks.vdcmedia.com

HC SQL SERVER 2000

c phi l Primary key hay khng....Bi v nhng thng tin ny cng c cha trong database nn cng l mt dng data nhng phn bit vi data "chnh thng" ngi ta gi n l Meta Data. Phn ny chc l bn phi xem thm trong mt thnh phn khc ca SQL Server sp gii thiu sau y l SQL Server Books Online v khng c bi no trong lot bi ny ni r v dch v ny c. SQL Server Books Online - Quyn Kinh Thnh khng th thiu: Cho d bn c c cc sch khc nhau dy v SQL server th bn cng s thy books online ny rt hu dng v khng th thiu c( cho nn Microsoft mi ho phng nh km theo SQL Server). SQL Server Tools - y l mt b ngh ca ngi qun tr c s d liu (DBA ) i ch nu k chi tit ra th hi nhiu y cho nn bn cn c thm trong books online. y ngi vit ch k ra mt vi cng c thng dng m thi. u tin phi k n Enterprise Manager. y l mt cng c cho ta thy ton cnh h thng c s d liu mt cch rt trc quan. N rt hu ch c bit cho ngi mi hc v khng thng tho lm v SQL. K n l Query Analyzer. i vi mt DBA gii th hu nh ch cn cng c ny l c th qun l c mt h thng database m khng cn n nhng th khc. y l mt mi trng lm vic kh tt v ta c th nh bt k cu lnh SQL no v chy ngay lp tc c bit l n gip cho ta debug my ci stored procedure d dng. Cng c th ba cn phi k n l SQL Profiler. N c kh nng "chp" (capture) tt c cc s kin hay hot ng din ra trn mt SQL server v lu li di dng text file rt hu dng trong vic kim sot hot ng ca SQL Server. Ngoi mt s cng c trc quan nh trn chng ta cng thng hay dng osql v bcp (bulk copy) trong command prompt. Tm li trong bi ny chng ta do qua mt vng tm hiu v SQL Server. Trong bi sau chng ta cng s tip tc do chi thm mt cht vi TransactSQL trc khi i su vo cc ti khc.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

Transact SQL
Gii Thiu S Lc V Transact SQL (T-SQL)
Transact-SQL l ngn ng SQL m rng da trn SQL chun ca ISO (International Organization for Standardization) v ANSI (American National Standards Institute) c s dng trong SQL Server khc vi P-SQL (ProceduralSQL) dng trong Oracle. Trong bi ny chng ta s tm hiu s qua v T-SQL. Chng c chia lm 3 nhm: Data Definition Language (DDL): y l nhng lnh dng qun l cc thuc tnh ca mt database nh nh ngha cc hng hoc ct ca mt table, hay v tr data file ca mt database...thng c dng

Create object_Name Alter object_Name Drop object_Name

Trong object_Name c th l mt table, view, stored procedure, indexes... V d: Lnh Create sau s to ra mt CompanyID,CompanyName,Contact
USE Northwind CREATE TABLE Importers( CompanyID int NOT NULL, CompanyName varchar(40) NOT NULL, Contact varchar(40) NOT NULL )

table

tn

Importers

vi

ct

Lnh Alter sau y cho php ta thay i nh ngha ca mt table nh thm(hay bt) mt ct hay mt Constraint...Trong v d ny ta s thm ct ContactTitle vo table Importers
USE Northwind

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

ALTER TABLE Importers ADD ContactTitle varchar(20) NULL

Lnh Drop sau y s hon ton xa table khi database ngha l c nh ngha ca table v data bn trong table u bin mt (khc vi lnh Delete ch xa data nhng table vn tn ti).
USE Northwind DROP TABLE Importers

Data Control Language (DCL): y l nhng lnh qun l cc quyn truy cp ln tng object (table, view, stored procedure...). Thng c dng sau:

Grant Revoke Deny

V d: Lnh sau s cho php user trong Public Role c quyn Select i vi table Customer trong database Northwind (Role l mt khi nim ging nh Windows Group s c bn k trong phn Security)
USE Northwind GRANT SELECT ON Customers TO PUBLIC

Lnh sau s t chi quyn Select i vi table Customer trong database Northwind ca cc user trong Public Role
USE Northwind DENY SELECT ON Customers TO PUBLIC

Lnh sau s xa b tc dng ca cc quyn c cho php hay t chi trc


USE Northwind REVOKE SELECT ON Customers TO PUBLIC

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 Data Manipulation Language (DML):

y l nhng lnh ph bin dng x l data nh Select, Update, Insert, Delete V d: Select
USE Northwind SELECT CustomerID, CompanyName, ContactName FROM Customers WHERE (CustomerID = 'alfki' OR CustomerID = 'anatr') ORDER BY ContactName

Insert
USE Northwind INSERT INTO Territories VALUES (98101, 'Seattle', 2)

Update
USE Northwind UPDATE Territories SET TerritoryDescription = 'Downtown Seattle' WHERE TerritoryID = 98101

Delete
USE Northwind DELETE FROM Territories WHERE TerritoryID = 98101

V phn ny kh cn bn nn chng ti thit ngh khng cn gii thch nhiu. Ch trong lnh Delete bn c th c ch From hay khng u c. Nhng m chng ta s chy th cc v d trn u? chy cc cu lnh th d trn bn cn s dng v lm quen vi Query Analyser

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

10

C Php Ca T-SQL:
Phn ny chng ta s bn v cc thnh phn to nn c php ca T-SQL Identifiers y chnh l tn ca cc database object. N dng xc nh mt object. (Ch khi ni n Object trong SQL Server l chng ta mun cp n table, view, stored procedure, index.....V hu nh mi th trong SQL Server u c thit k theo kiu hng i tng (object-oriented)). Trong v d sau TableX, KeyCol, Description l nhng identifiers
CREATE TABLE TableX (KeyCol INT PRIMARY KEY, Description NVARCHAR(80))

C hai loi Identifiers mt loi thng thng (Regular Identifier) v mt loi gi l Delimited Identifier, loi ny cn c du "" hay du [] ngn cch. Loi Delimited c dng i vi cc ch trng vi t kha ca SQL Server (reserved keyword) hay cc ch c khong trng.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 V d:


SELECT * FROM [My Table] WHERE [Order] = 10

11

Trong v d trn ch Order trng vi keyword Order nn cn t trong du ngoc vung []. Variables (Bin) Bin trong T-SQL cng c chc nng tng t nh trong cc ngn ng lp trnh khc ngha l cn khai bo trc loi d liu trc khi s dng. Bin c bt u bng du @ (i vi cc global variable th c hai du @@) V d:
USE Northwind DECLARE @EmpIDVar INT SET @EmpIDVar = 3 SELECT * FROM Employees WHERE EmployeeID = @EmpIDVar + 1

Functions (Hm) C 2 loi hm mt loi l built-in v mt loi user-defined Cc hm Built-In c chia lm 3 nhm:

Rowset Functions : Loi ny thng tr v mt object v c i x nh mt table. V d nh hm OPENQUERY s tr v mt recordset v c th ng v tr ca mt table trong cu lnh Select. Aggregate Functions : Loi ny lm vic trn mt s gi tr v tr v mt gi tr n hay l cc gi tr tng. V d nh hm AVG s tr v gi tr trung bnh ca mt ct. Scalar Functions : Loi ny lm vic trn mt gi tr n v tr v mt gi tr n. Trong loi ny li chia lm nhiu loi nh nh cc hm v ton hc, v thi gian, x l kiu d liu String....V d nh hm MONTH('2002-09-30') s tr v thng 9.

Cc hm User-Defined (c to ra bi cu lnh CREATE FUNCTION v phn body thng c gi trong cp lnh BEGIN...END) cng c chia lm cc nhm nh sau:

Scalar Functions : Loi ny cng tr v mt gi tr n bng cu lnh RETURNS. Table Functions : Loi ny tr v mt table

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 Data Type (Loi D Liu) Cc loi d liu trong SQL Server s c bn k trong cc bi sau Expressions Cc Expressions c dng Identifier + Operators (nh +,-,*,/,=...) + Value Cc thnh phn Control-Of Flow

12

Nh BEGIN...END, BREAK, CONTINUE, GOTO, IF...ELSE, RETURN, WHILE.... Xin xem thm Books Online bit thm v cc thnh phn ny. Comments (Ch Thch) T-SQL dng du -- nh du phn ch thch cho cu lnh n v dng /*...*/ ch thch cho mt nhm

Thc Thi Cc Cu Lnh SQL


Thc thi mt cu lnh n: Mt cu lnh SQL c phn ra thnh cc thnh phn c php nh trn bi mt parser, sau SQL Optimizer (mt b phn quan trng ca SQL Server) s phn tch v tm cch thc thi (Execute Plan) ti u nht v d nh cch no nhanh v tn t ti nguyn ca my nht... v sau SQL Server Engine s thc thi v tr v kt qu. Thc Thi mt nhm lnh (Batches) Khi thc thi mt nhm lnh SQL Server s phn tch v tm bin php ti u cho cc cu lnh nh mt cu lnh n v cha execution plan c bin dch (compiled) trong b nh sau nu nhm lnh trn c gi li ln na th SQL Server khng cn bin dch m c th thc thi ngay iu ny gip cho mt batch chy nhanh hn. Lnh GO Lnh ny ch dng gi mt tn hiu cho SQL Server bit kt thc mt batch job v yu cu thc thi. N vn khng phi l mt lnh trong T-SQL. Tm li trong phn ny chng ta tm hiu v Transact- SQL l ngn ng chnh giao tip vi SQL Server. Trong bi sau chng ta s tip tc bn v cu trc bn trong ca SQL Server .

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 Design and Implement a SQL Server Database

13

Cu Trc Ca SQL Server


Nh trnh by cc bi trc mt trong nhng c im ca SQL Server 2000 l Multiple-Instance nn khi ni n mt (SQL) Server no l ta ni n mt Instance ca SQL Server 2000, thng thng l Default Instance. Mt Instance ca SQL Server 2000 c 4 system databases v mt hay nhiu user database. Cc system databases bao gm:

Master : Cha tt c nhng thng tin cp h thng (system-level information) bao gm thng tin v cc database khc trong h thng nh v tr ca cc data files, cc login account v cc thit t cu hnh h thng ca SQL Server (system configuration settings). Tempdb : Cha tt c nhng table hay stored procedure c tm thi to ra trong qu trnh lm vic bi user hay do bn thn SQL Server engine. Cc table hay stored procedure ny s bin mt khi khi ng li SQL Server hay khi ta disconnect. Model : Database ny ng vai tr nh mt bng km (template) cho cc database khc. Ngha l khi mt user database c to ra th SQL Server s copy ton b cc system objects (tables, stored procedures...) t Model database sang database mi va to. Msdb : Database ny c SQL Server Agent s dng hoch nh cc bo ng v cc cng vic cn lm (schedule alerts and jobs).

Cu Trc Vt L Ca Mt SQL Server Database


Mi mt database trong SQL Server u cha t nht mt data file chnh (primary), c th c thm mt hay nhiu data file ph (Secondary) v mt transaction log file.

Primary data file (thng c phn m rng .mdf) : y l file chnh cha data v nhng system tables. Secondary data file (thng c phn m rng .ndf) : y l file ph thng ch s dng khi database c phn chia cha trn nhiu da. Transaction log file (thng c phn m rng .ldf) : y l file ghi li tt c nhng thay i din ra trong mt database v cha y thng tin c th roll back hay roll forward khi cn.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 Data trong SQL Server c cha thnh tng Page 8KB v 8 page lin tc to thnh mt Extent nh hnh v di y:

14

Trc khi SQL Server mun lu data vo mt table n cn phi dnh ring mt khong trng trong data file cho table . Nhng khong trng chnh l cc extents. C 2 loi Extents: Mixed Extents (loi hn hp) dng cha data ca nhiu tables trong cng mt Extent v Uniform Extent (loi thun nht) dng cha data ca mt table. u tin SQL Server dnh cc Page trong Mixed Extent cha data cho mt table sau khi data tng trng th SQL dnh hn mt Uniform Extent cho table .

Nguyn Tc Hot ng Ca Transaction Log Trong SQL Server


Transaction log file trong SQL Server dng ghi li cc thay i xy ra trong database. Qu trnh ny din ra nh sau: u tin khi c mt s thay i data nh Insert, Update, Delete c yu cu t cc ng dng, SQL Server s ti (load) data page tng ng ln memory (vng b nh ny gi l data cache), sau data trong data cache c thay i(nhng trang b thay i cn gi l dirty-page). Tip theo mi s thay i u c ghi vo transaction log file cho nn ngi ta gi l write-ahead log. Cui cng th mt qu trnh gi l Check Point Process s kim tra v vit tt c nhng transaction c commited (hon tt) vo da cng (flushing the page).

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

15

Ngoi Check Point Process nhng dirty-page cn c a vo da bi mt Lazy writer. y l mt anh chng lm vic m thm ch thc gic v qut qua phn data cache theo mt chu k nht nh sau li ng yn ch ln qut ti. Xin gii thch thm mt cht v khi nim transaction trong database. Mt transaction hay mt giao dch l mt lot cc hot ng xy ra c xem nh mt cng vic n (unit of work) ngha l hoc thnh cng ton b hoc khng lm g c (all or nothing). Sau y l mt v d c in v transaction:
Chng ta mun chuyn mt s tin $500 t account A sang account B nh vy cng vic ny cn lm cc bc sau: 1. Tr $500 t account A 2. Cng $500 vo account B Tuy nhin vic chuyn tin trn phi c thc hin di dng mt transaction ngha l giao dch ch c xem l hon tt (commited) khi c hai bc trn u thc hin thnh cng. Nu v mt l do no ta ch c th thc hin c bc 1 (chng hn nh va xong bc 1 th in cp hay my b treo) th xem nh giao dch khng hon tt v cn phi c phc hi li trng thi ban u (roll back).

Th th Check Point Process hot ng nh th no c th m bo mt transaction c thc thi m khng lm "d" database.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

16

Trong hnh v trn, mt transaction c biu din bng mt mi tn. Trc nm ngang l trc thi gian. Gi s mt Check Point c nh du vo thi im gia transaction 2 v 3 nh hnh v v sau s c xy ra trc khi gp mt Check point k tip. Nh vy khi SQL Server c restart n s da trn nhng g ghi trong transaction log file phc hi data (xem hnh v). iu c ngha l SQL Server s khng cn lm g c i vi transaction 1 v ti thi im Check point data c lu vo da ri. Trong khi transaction 2 v 4 s c roll forward v tuy c commited nhng do s c xy ra trc thi im check point k tip nn data cha kp lu vo da. Tc l da trn nhng thng tin c ghi trn log file SQL Server hon ton c y c s vit vo da cng. Cn transaction 3 v 5 th cha c commited (do b down bt ng) cho nn SQL Server s roll back hai transaction ny da trn nhng g c ghi trn log file.

Cu Trc Logic Ca Mt SQL Server Database


Hu nh mi th trong SQL Server c t chc thnh nhng objects v d nh tables, views, stored procedures, indexes, constraints.... Nhng system objects trong SQL Server thng c bt u bng ch sys hay sp. Cc objects trn s c nghin cu ln lt trong cc bi sau do trong phn ny chng ta ch bn s qua mt s system object thng dng trong SQL Server database m thi.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 Mt s Sytem objects thng dng:


System Stored Procedure Sp_help ['object'] Sp_helpdb ['database'] Sp_monitor Sp_spaceused ['object', 'updateusage' ] Sp_who ['login'] ng dng Cung cp thng tin v mt database object (table, view...) hay mt data type. Cung cp thng tin v mt database c th no . Cho bit bn rn ca SQL Server

17

Cung cp thng tin v cc khong trng c s dng cho mt object no Cho bit thng tin v mt SQL Server user

V d: sp_helpdb 'Northwind' s cho kt qu c dng nh bng di y name db_size owner dbid created status ..... ------------------------------------------------------------------------------------------------------------------------------- ------Northwind 3.94 MB sa 6 Aug 6 2000 Status=ONLINE, Updateability=READ_WRITE, ..... stored procedure sp_spaceused nh v d sau
USE Northwind Go sp_spaceused 'Customers'

s cho bit thng tin v table Customer: name rows reserved data index_size unused ------------------------------------- -----------------------------------------Customers 91 104 KB 24 KB 80 KB 0 KB

To Mt User Database
Chng ta c th to mt database d dng dng SQL Server Enterprise bng cch right-click ln trn "database" v chn "New Database" nh hnh v sau:

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

18

Sau chng ta ch vic nh tn ca database v click OK. Ngoi ra i khi chng ta cng dng SQL script to mt database. Khi ta phi ch r v tr ca primary data file v transaction log file. V d:
USE master GO CREATE DATABASE Products ON ( NAME = prods_dat, FILENAME = 'c:\program files\microsoft SQL server\mssql\data\prods.mdf', SIZE = 4, MAXSIZE = 10, FILEGROWTH = 1 ) GO

Trong v d trn ta to mt database tn l Products vi logical file name l prods_dat v physical file name l prods.mdf, kch thc ban u l 4 MB v data file s t ng tng ln mi ln 1 MB cho ti ti a l 10 MB. Nu ta khng

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

19

ch nh mt transaction log file th SQL s t ng to ra 1 log file vi kch thc ban u l 1 MB. Lu : Khi to ra mt database chng ta cng phi lu mt s im sau: i vi cc h thng nh m vn tc ca server khng thuc loi nhy cm th chng ta thng chn cc gi tr mc nh (default) cho Initial size, Automatically growth file. Nhng trn mt s production server ca cc h thng ln kch thc ca database phi c ngi DBA c lng trc ty theo tm c ca business, v thng thng ngi ta khng chn Autogrowth(t ng tng trng) v Autoshrink(t ng nn). Cu hi c t ra y l v sao ta khng SQL Server chn mt gi tr khi u cho datafile v sau khi cn th n s t ng ni rng ra m li phi c lng trc? Nguyn nhn l nu chn Autogrowth (hay Autoshrink) th chng ta c th s gp 2 vn sau:

Performance hit: nh hng ng k n kh nng lm vic ca SQL Server. Do n phi thng xuyn kim tra xem c khong trng cn thit hay khng v nu khng n s phi m rng bng cch dnh thm khong trng t da cng v chnh qu trnh ny s lm chm i hot ng ca SQL Server. Disk fragmentation : Vic m rng trn cng s lm cho data khng c lin tc m cha nhiu ni khc nhau trong da cng iu ny cng gy nh hng ln tc lm vic ca SQL Server.

Trong cc h thng ln ngi ta c th d on trc kch thc ca database bng cch tnh ton kch thc ca cc tables, y cng ch l kch thc c on m thi (xin xem "Estimating the size of a database" trong SQL Books Online bit thm v cch tnh) v sau thng xuyn dng mt s cu lnh SQL (thng dng cc cu lnh bt u bng DBCC .Phn ny s c bn qua trong cc bi sau) kim tra xem c khong trng hay khng nu khng ta c th chn mt thi im m SQL server t bn rn nht (nh ban m hay sau gi lm vic) ni rng data file nh th s khng lm nh hng ti performance ca Server. Ch gi s ta dnh sn 2 GB cho datafile, khi dng Window Explorer xem ta s thy kch thc ca file l 2 GB nhng data thc t c th ch chim vi chc MB m thi.

Nhng im Cn Lu Khi Thit K Mt Database


Trong phm vi bi ny chng ta khng th ni su v l thuyt thit k database m ch a ra mt vi li khuyn m bn nn tun theo khi thit k.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

20

Trc ht bn phi nm vng v cc loi data type. V d bn phi bit r s khc bit gia char(10), nchar(10) varchar(10), nvarchar(10). Loi d liu Char l mt loi string c kch thc c nh ngha l trong v d trn nu data a vo "This is a really long character string" (ln hn 10 k t) th SQL Server s t ng ct phn ui v ta ch cn "This is a". Tng t nu string a vo nh hn 10 th SQL s thm khong trng vo pha sau cho 10 k t. Ngc li loi varchar s khng thm cc khong trng pha sau khi string a vo t hn 10. Cn loi data bt u bng ch n cha d liu dng unicode. Mt lu khc l trong SQL Server ta c cc loi Integer nh : tinyint, smallint, int, bigint. Trong kch thc tng loi tng ng l 1,2,4,8 bytes. Ngha l loi smallint tng ng vi Integer v loi int tng ng vi Long trong VB. Khi thit k table nn:

C t nht mt ct thuc loi ID dng xc nh mt record d dng. Ch cha data ca mt entity (mt thc th)

Trong v d sau thng tin v Sch v Nh Xut Bn c cha trong cng mt table Books
BookID Title 1 2 3 Windows 2000 Server Publisher New Riders PubState CA MA CA PubCity Berkely Boston Berkely PubCountry USA USA USA

Inside SQL Server 2000 Microsoft Press Beginning Visual Basic Wrox 6.0

Ta nn tch ra thnh table Books v table Publisher nh sau: Books


BookID 1 2 3 Title Inside SQL Server 2000 Windows 2000 Server Beginning Visual Basic 6.0 PublisherID P1 P2 P3

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 v Publishers


PublisherID Publisher P1 P2 P3 Microsoft Press New Riders Wrox PubState CA MA CA PubCity Berkely Boston Berkely PubCountry USA USA USA

21

Trnh dng ct c cha NULL v nn lun c gi tr Default cho cc ct Trnh lp li mt gi tr hay ct no

V d mt cun sch c th c vit bi hn mt tc gi v nh th ta c th dng mt trong 2 cch sau cha data: Books
BookID 1 2 3 Title Inside SQL Server 2000 Windows 2000 Server Beginning Visual Basic 6.0 Authors John Brown Matthew Bortniker, Rick Johnson Peter Wright, James Moon, John Brown

hay Books
BookID Title 1 2 3 Author1 Matthew Bortniker Peter Wright Author2 Null Rick Johnson James Moon Author3 Null Null John Brown

Inside SQL Server 2000 John Brown Windows 2000 Server Beginning Visual Basic 6.0

Tuy nhin vic lp i lp li ct Author s to nhiu vn sau ny. Chng hn nh nu cun sch c nhiu hn 3 tc gi th chng ta s gp phin phc ngay....Trong v d ny ta nn cht ra thnh 3 table nh sau:

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 Books


BookID 1 2 3 Title Inside SQL Server 2000 Windows 2000 Server Beginning Visual Basic 6.0

22

Authors
AuthID A1 A2 A3 A4 A5 First Name John Matthew Rick Peter James Last Name Brown Bortniker Johnson Wright Moon

AuthorBook
BookID 1 2 2 3 3 3 AuthID A1 A2 A3 A4 A5 A1

Ngoi ra mt trong nhng iu quan trng l phi bit r quan h (Relationship) gia cc table:

One-to-One Relationships : trong mi quan h ny th mt hng bn table A khng th lin kt vi hn 1 hng bn table B v ngc li. One-to-Many Relationships : trong mi quan h ny th mt hng bn table A c th lin kt vi nhiu hng bn table B. Many-to-Many Relationships : trong mi quan h ny th mt hng bn table A c th lin kt vi nhiu hng bn table B v mt hng bn table B cng c th lin kt vi nhiu hng bn table A. Nh ta thy trong v d trn mt cun sch c th c vit bi nhiu tc gi v mt tc gi cng c th vit nhiu cun sch. Do mi quan h gia Books v Authors l quan h Many to Many. Trong trng hp ny ngi ta thng dng mt table trung gian gii quyt vn (table AuthorBook).

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

23

c mt database tng i hon ho ngha l thit k sao cho data cha trong database khng tha khng thiu bn cn bit thm v cc th thut Normalization. Tuy nhin trong phm vi kha hc ny chng ti khng mun bn su hn v ti ny, bn c th xem thm trong cc sch dy l thuyt c s d liu. Tm li trong bi ny chng ta tm hiu v cu trc ca mt SQL Server database v mt s vn cn bit khi thit k mt database. Trong bi sau chng ta s bn v Backup v Restore database nh th no.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

24

Backup And Restore SQL Server


Chin Lc Phc Hi D Liu (Data Restoration Strategy)
C mt iu m chng ta phi ch l hu nh bt k database no cng cn c phc hi vo mt lc no trong sut chu k sng ca n. L mt ngi Database Administrator bn cn phi gim ti a s ln phi phc hi d liu, lun theo di, kim tra thng xuyn pht hin cc trc trc trc khi n xy ra. Phi d phng cc bin c c th xy ra v bo m rng c th nhanh chng phc hi d liu trong thi gian sm nht c th c. Cc dng bin c hay tai ha c th xy ra l:

a cha data file hay Transaction Log File hay system file b mt Server b h hng Nhng thm ha t nhin nh bo lt, ng t, ha hon Ton b server b nh cp hoc ph hy Cc thit b dng backup - restore b nh cp hay h hng Nhng li do v ca user nh l tay delete ton b table chng hn Nhng hnh vi mang tnh ph hoi ca nhn vin nh c a vo nhng thng tin sai lc. B hack (nu server c kt ni vi internet).

Bn phi t hi khi cc vn trn xy ra th bn s lm g v phi lun c bin php phng c th cho tng trng hp c th. Ngoi ra bn phi xc nh thi gian ti thiu cn phc hi d liu v a server tr li hot ng bnh thng.

Cc Loi Backup
c th hiu cc kiu phc hi d liu khc nhau bn phi bit qua cc loi backup trong SQL Server

Full Database Backups : Copy tt c data files trong mt database . Tt c nhng user data v database objects nh system tables, indexes, user-defined tables u c backup.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000


25

Differential Database Backups : Copy nhng thay i trong tt c data files k t ln full backup gn nht. File or File Group Backups : Copy mt data file n hay mt file group. Differential File or File Group Backups : Tng t nh differential database backup nhng ch copy nhng thay i trong data file n hay mt file group. Transaction Log Backups : Ghi nhn mt cch th t tt c cc transactions cha trong transaction log file k t ln transaction log backup gn nht. Loi backup ny cho php ta phc hi d liu tr ngc li vo mt thi im no trong qu kh m vn m bo tnh ng nht (consistent).

Trong lc backup SQL Server cng copy tt c cc hot ng ca database k c hot ng xy ra trong qu trnh backup cho nn ta c th backup trong khi SQL ang chy m khng cn phi ngng li.

Recovery Models

Full Recovery Model : y l model cho php phc hi d liu vi t ri ro nht. Nu mt database trong mode ny th tt c cc hot ng khng ch insert, update, delete m k c insert bng Bulk Insert, hay bcp u c log vo transaction log file. Khi c s c th ta c th phc hi li d liu ngc tr li ti mt thi im trong qu kh. Khi data file b h nu ta c th backup c transaction log file th ta c th phc hi database n thi im transaction gn nht c commited. Bulk-Logged Recovery Model : mode ny cc hot ng mang tnh hng lot nh Bulk Insert, bcp, Create Index, WriteText, UpdateText ch c log minimum vo transaction log file cho bit l cc hot ng ny c din ra m khng log ton b chi tit nh trong Full Recovery Mode. Cc hot ng khc nh Insert, Update, Delete vn c log y dng cho vic phc hi sau ny. Simple Recovery Model : mode ny th Transaction Log File c truncate thng xuyn v khng cn backup. Vi mode ny bn ch c th phc hi ti thi im backup gn nht m khng th phc hi ti mt thi im trong qu kh.

Mun bit database ca bn ang mode no bn c th Right-click ln mt database no trong SQL Server Enterprise Manager chn Properties>Options->Recovery

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

26

Tuy nhin c th ti y bn cm thy rt kh hiu v nhng iu trnh by trn. Chng ta hy dng mt v d sau lm r vn . V d: Chng ta c mt database c p dng chin lc backup nh hnh v sau:

Trong v d ny ta schedule mt Full Database Backup vo ngy Ch Nht v Differential Backup vo cc ngy th Ba v Th Nm. Transaction Log Backup c schedule hng ngy. Vo mt ngy Th Su "en ti" mt s c xy ra l a cha data file ca database b h v l mt DBA bn c yu cu phi phc hi d liu v a database tr li hot ng bnh thng. Bn phi lm sao? Trc ht bn phi backup ngay Transaction Log File (Trong v d ny Transaction Log File c cha trong mt a khc vi a cha Data File nn khng b h v vn cn hot ng). Ngi ta cn gi file backup trong trng hp ny l " the tail of the log" (ci ui). Nu Log File c cha trn cng mt a vi Data file th bn c th s khng backup c "ci ui" v nh vy bn phi dng n log file backup gn nht. Khi backup "ci ui" ny bn cn phi dng option NO_TRUNCATE bi v thng thng cc Transaction Log Backup s truncate(xo) nhng phn khng cn dng n trong transaction log file, l nhng transaction c commited v c vit vo database (cn gi l inactive portion of the transaction log) gim kch thc ca log file. Tuy nhin khi backup phn ui khng c truncate m bo tnh consistent (nht qun) ca database. http://ebooks.vdcmedia.com

HC SQL SERVER 2000

27

K n bn phi restore database t Full Backup File ca ngy Ch Nht. N s lm 2 chuyn : copy data, log, index... t a backup vo Data Files v sau s ln lt thc thi cc transaction trong transaction log. Lu ta phi dng option WITH NORECOVERY trong trng hp ny (tc l option th 2 "Leave database nonoperational but able to restore additional transaction logs" trong Enterprise Manager). Ngha l cc transaction cha hon tt (incomplete transaction) s khng c roll back. Nh vy database lc ny s trong tnh trng inconsistent v khng th dng c. Nu ta chn WITH RECOVERY (hay "Leave database operational. No additional transaction logs can be restored " trong Enterprise Manager) th cc incomplete transaction s c roll back v database trng thi consistent nhng ta khng th no restore cc transaction log backup c na. Tip theo bn phi restore Differential Backup ca ngy Th Nm. Sau ln lt restore cc Transaction Log Backup k t sau ln Differential Backup cui cng ngha l restore Transaction Log Backup ca ngy Th Nm v "Ci ui". Nh vy ta c th phc hi data tr v trng thi trc khi bin c xy ra. Qu trnh ny gi l Database Recovery. Cng xin lm r cch dng t Database Restoration v Database Recovery trong SQL Server. Hai t ny nu dch ra ting Vit u c ngha l phc hi c s d liu nhng khi c sch ting Anh phi cn thn v n c ngha hi khc nhau. Nh trong v d trn Khi ta restore database t mt file backup ngha l ch n gin ti to li database t nhng file backup v thc thi li nhng transaction c commit nhng database c th trong trng thi inconsistent v khng s dng c. Nhng khi ni n recover ngha l ta khng ch phc hi li data m cn bo m cho n trng thi consistent v s dng c (usable). C th bn s hi consistent l th no? Phn ny s c ni r trong bi sau v Data Integrity. Nhng cng xin dng mt v d n gin gii thch. Trong v d v th no l mt transaction bi 3 : Gi s s tin $500 c tr khi account A nhng li khng c cng vo account B v nu database khng c qu trnh khi phc d liu t ng (automatic recovery process) ca SQL rollback th n s trng thi inconsistent. Nu database trng thi ging nh trc khi tr tin hoc sau khi cng $500 thnh cng vo account B th gi l consistent. Cho nn vic backup Transaction Log File s gip cho vic recovery data ti bt k thi im no trong qu kh. i vi Simple Recovery Model ta ch c th recover ti ln backup gn nht m thi.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

28

Nh vy khi restore database ta c th chn option WITH RECOVERY roll back cc transaction cha c commited v database c th hot ng bnh thng nhng ta khng th restore thm backup file no na, thng option ny c chn khi restore file backup cui cng trong chui backup. Nu chn option WITH NORECOVERY cc transaction cha c commited s khng c roll back do SQL Server s khng cho php ta s dng database nhng ta c th tip tc restore cc file backup k tip, thng option ny c chn khi sau ta cn phi restore cc file backup khc. Khng l ch c th chn mt trong hai option trn m thi hay sao? Khng hon ton nh vy ta c th chn mt option trung lp hn l option WITH STANDBY (tc l option 3 "Leave database read-only and able to restore additional transaction logs" trong Enterprise Manager). Vi option ny ta s c lun c tnh ca hai option trn : cc incomplete transaction s c roll back m bo database consistent v c th s dng c nhng ch di dng Read-only m thi, ng thi sau ta c th tip tc restore cc file backup cn li (SQL Server s log cc transaction c roll back trong undo log file v khi ta restore backup file k tip SQL Server s tr li trng thi no recovery t nhng g ghi trn undo file). Ngi ta dng option ny khi mun restore database tr li mt thi im no (a point in time) nhng khng r l c phi l thi im m h mun khng, cho nn h s restore tng backup file dng Standby v kim chng mt s data xem c phi l thi im m h mun restore hay khng (chng hn nh trc khi b delete hay trc khi mt transaction no c thc thi) trc khi chuyn sang Recovery option.

Backup Database
Trong phn ny chng ta s bn v cch backup database. Nhng trc ht chng ta hy lm quen vi mt s thut ng dng trong qu trnh backup v restore. C nhng t ta s nguyn ting Anh m khng dch.
Thut Ng Gii Thch Qu trnh copy ton b hay mt phn ca database, transaction log, file hay file group hnh thnh mt backup set. Backup set c cha trn backup media (tape or disk) bng cch s dng mt backup device (tape drive name hay physical filename) Mt file vt l (nh C:\SQLBackups\Full.bak) hay tape drive c th (nh \\.\Tape0) dng record mt backup vo mt backup media. File cha mt backup set Disk hay tape c s dng cha mt backup set. Backup media c th cha nhiu backup sets (v d nh t nhiu SQL Server 2000 backups v t nhiu Windows 2000 backups). Mt b backup t mt ln backup n c cha trn backup media.

Backup

Backup Device Backup File Backup Media Backup Set

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

29

Chng ta c th to mt backup device c nh (permanent) hay to ra mt backup file mi cho mi ln backup. Thng thng chng ta s to mt backup device c nh c th dng i dng li c bit cho vic t ng ha cng vic backup. to mt backup device dng Enterprise Manager bn chn Management->Backup ri Right-click->New Backup Device. Ngoi ra bn c th dng sp_addumpdevice system stored procedure nh v d sau:
USE Master Go Sp_addumpdevice 'disk' , 'FullBackupDevice' , 'E:\SQLBackups\Full.bak'

backup database bn c th dng Backup Wizard hoc click ln trn database mun backup sau Right-click->All Tasks->Backup Database... s hin ra window nh hnh v sau:

Sau da ty theo yu cu ca database m chn cc option thch hp. Ta c th schedule cho SQL Server backup nh k.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

30

Restore Database
Trc khi restore database ta phi xc nh c th t file cn restore. Cc thng tin ny c SQL Server cha trong msdb database v s cho ta bit backup device no, ai backup vo thi im no. Sau ta tin hnh restore. restore bn Right-click->All Tasks->Restore database... s thy window nh hnh v sau:

Nu bn restore t mt instance khc ca SQL Server hay t mt server khc bn c chn From device option v chn backup device (file backup) tng ng . Lu nu bn mun overwrite database c sn vi data c backup bn c th chn option Force restore over existing database nh hnh v sau:

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

31

Bn c th chn leave database operational hay nonoperational ty theo trng hp nh gii thch trn. Tm li trong bi ny chng ta tm hiu mt cht l thuyt v backup v restore database trong SQL Server. c th hiu r hn bn cn phi thc tp hay lm th c thm kinh nghim. Trong bi sau chng ta s bn v ti Data Integrity ngha l lm sao m bo data cha trong database l ng tin cy v khng b "lng l" nh cch ni bnh dn m ti thng hay dng. Data Integrity and Advanced Query Technique Ni n Data Integrity l ta ni n tnh ton vn ca mt database hay ni mt cch khc l data cha trong database phi chnh xc v ng tin cy. Nu data cha trong database khng chnh xc ta ni database mt tnh ton vn (lost data integrity). Trong bi ny chng ta s bn qua cc phng php gi cho database c ton vn.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

32

Cc Phng Php m Bo Data Integrity


SQL Server dng mt s cch m bo Data Integrity. Mt s cch nh Triggers hay Index s c bn n trong cc bi sau tuy nhin trong phm vi bi ny chng ta cng ni s qua cc cch trn.

Data Type : Data type cng c th m bo tnh ton vn ca data v d bn khai bo data type ca mt ct l Integer th bn khng th a gi tr thuc dng String vo c. Not Null Definitions : Null l mt loi gi tr c bit, n khng tng ng vi zero, blank hay empty string " " m c ngha l khng bit (unknown) hay cha c nh ngha (undefined). Khi thit k database ta nn lun cn thn trong vic cho php mt ct c Null hay Not Null v vic cha Null data c th lm cho mt s ng dng vn khng xa l null data k lng b "t". Default Definitions : Nu mt ct c cho mt gi tr default th khi bn khng a vo mt gi tr c th no th SQL Server s dng gi tr mc nh ny. Bn phi dng Default i vi Not Null definition. Identity Properties : Data thuc dng ID s m bo tnh duy nht ca data trong table. Constraints : y s l phn m ta o su trong bi ny. Constraint tm dch l nhng rng buc m ta dng m bo tnh ton vn ca data. Constraints l nhng quy lut m ta p t ln mt ct m bo tnh chnh xc ca d liu c nhp vo. Rules : y l mt object mang tnh backward-compatible ch yu tng thch vi cc version trc y ca SQL Server. Rules tng ng vi CHECK Constraint trong SQL Server 2000 nhng ngi ta c xu hng s dng CHECK Constraint v n chnh xc hn v c th t nhiu Constraints ln mt ct trong khi ch c mt rule cho mt ct m thi. Ch rule l mt object ring v sau lin kt vi mt ct no ca table trong khi CHECK constraint l mt thuc tnh ca table nn c th c to ra vi lnh CREATE TABLE. Triggers : Mt loi stored procedure c bit c thc thi mt cch t ng khi mt table c Update, Insert, hay Delete. V d ta mun khi mt mn hng c bn ra th tng s hng ha trong kho phi c gim xung (-1) chng hn khi ta c th dng trigger m bo chuyn . Triggers s c bn k trong cc bi sau. Indexes : s c bn n trong bi ni v Indexes.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

33

Constraints
Constraints l nhng thuc tnh (property) m ta p t ln mt table hay mt ct trnh vic lu d liu khng chnh xc vo database (invalid data). Tht ra NOT NULL hay DEFAULT cng c xem l mt dng constraint nhng chng ta khng bao gm hai loi ny y m ch trnh by 4 loi constraints l Primary Key Constraint, Unique Constraint, Foreign Key Constraint v Check Constraint. Primary Key Constraint: Mt table thng c mt hay nhiu ct c gi tr mang tnh duy nht xc nh mt hng bt k trong table. Ta thng gi l Primary Key v c to ra khi ta Create hay Alter mt table vi Primary Key Constraint. Mt table ch c th c mt Primary Key constraint. C th c nhiu ct tham gia vo vic to nn mt Primary Key, cc ct ny khng th cha Null v gi tr trong cc ct thnh vin c th trng nhau nhng gi tr ca tt c cc ct to nn Primary Key phi mang tnh duy nht. Khi mt Primary Key c to ra mt Unique Index s c t ng to ra duy tr tnh duy nht. Nu trong table cha c Clustered Index th mt Unique + Clustered Index s c to ra. C th to ra Primary Key Constraints nh sau:
CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 VARCHAR(30) )

hay
CREATE TABLE Table1 (Col1 INT, Col2 VARCHAR(30), CONSTRAINT table_pk PRIMARY KEY (Col1) )

Unique Constraint Bn c th to Unique Constraint m bo gi tr ca mt ct no khng b trng lp. Tuy Unique Constraint v Primary Key Constraint u m bo tnh duy nht nhng bn nn dng Unique Constraint trong nhng trng hp sau:

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

34

Nu mt ct (hay mt s kt hp gia nhiu ct) khng phi l primary key. Nn nh ch c mt Primary Key Constraint trong mt table trong khi ta c th c nhiu Unique Constraint trn mt table. Nu mt ct cho php cha Null. Unique constraint c th p t ln mt ct cha gi tr Null trong khi primary key constraint th khng.

Cch to ra Unique Constraint cng tng t nh Primary Key Constraint ch vic thay ch Primary Key thnh Unique. SQL Server s t ng to ra mt nonclustered unique index khi ta to mt Unique Constraint. Foreign Key Constraint Foreign Key l mt ct hay mt s kt hp ca nhiu ct c s dng p t mi lin kt data gia hai table. Foreign key ca mt table s gi gi tr ca Primary key ca mt table khc v chng ta c th to ra nhiu Foreign key trong mt table. Foreign key c th reference (tham chiu) vo Primary Key hay ct c Unique Constraints. Foreign key c th cha Null. Mc d mc ch chnh ca Foreign Key Constraint l kim sot data cha trong table c Foreign key (tc table con) nhng thc cht n cng kim sot lun c data trong table cha Primary key (tc table cha). V d nu ta delete data trong table cha th data trong table con tr nn "m ci" (orphan) v khng th reference ngc v table cha. Do Foreign Key constraint s m bo iu khng xy ra. Nu bn mun delete data trong table cha th trc ht bn phi drop hay disable Foreign key trong table con trc. C th to ra Foreign Key Constraints nh sau:
CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 INT REFERENCES Employees(EmployeeID) )

hay
CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 INT, CONSTRAINT col2_fk FOREIGN KEY (Col2) REFERENCES Employees (EmployeeID) )

i khi chng ta cng cn Disable Foreign Key Constraint trong trng hp:

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

35

Insert hay Update: Nu data insert vo s vi phm nhng rng buc c sn (violate constraint) hay constraint ca ta ch mun p dng cho data hin thi m thi ch khng phi data s insert. Tin hnh qu trnh replicate. Nu khng disable Foreign Key Constraint khi replicate data th c th cn tr qu trnh copy data t source table ti destination table mt cch khng cn thit.

Check Constraint Check Constraint dng gii hn hay kim sot gi tr c php insert vo mt ct. Check Constraint ging Foreign Key Constraint ch n kim sot gi tr a vo mt ct nhng khc ch Foreign Key Constraint da trn gi tr table cha cho php mt gi tr c chp nhn hay khng trong khi Check Constraint da trn mt biu thc logic (logic expression) kim tra xem mt gi tr c hp l khng. V d ta c th p t mt Check Constraint ln ct salary ch chp nhn tin lng t $15000 n $100000/nm. Ta c th to ra nhiu Check Constraint trn mt ct. Ngoi ra ta c th to mt Check Constraint trn nhiu ct bng cch to ra Check Constraint mc table (table level). C th to ra Check Constraint nh sau:
CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 INT CONSTRAINT limit_amount CHECK (Col2 BETWEEN 0 AND 1000), Col3 VARCHAR(30) )

Trong v d ny ta gii hn gi tr chp nhn c ca ct Col2 t 0 n 1000. V d sau s to ra mt Check Constraint ging nh trn nhng table level:
CREATE TABLE Table1 (Col1 INT PRIMARY KEY, Col2 INT, Col3 VARCHAR(30), CONSTRAINT limit_amount CHECK (Col2 BETWEEN 0 AND 1000) )

Tng t nh Foreign Key Constraint i khi ta cng cn disable Check Constraint trong trng hp Insert hay Update m vic kim sot tnh hp l ca data khng p dng cho data hin ti. Trng hp th hai l replication. Mun xem hay to ra Constraint bng Enterprise Manager th lm nh sau:

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

36

Click ln trn mt table no v chn Design Table-> Click vo icon bn phi "Manage Constraints..."

Advanced Query Techniques


Trong phn ny chng ta s o su mt s cu lnh nng cao nh SELECT, INSERT... C th ni hu nh ai cng bit qua cu lnh cn bn kiu nh "SELECT * FROM TABLENAME WHERE..." nhng c th c nhiu ngi khng bit n nhng tnh cht nng cao ca n. C php y ca mt cu lnh SELECT rt phc tp tuy nhin y ch trnh by nhng nt chnh ca lnh ny m thi: SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC | DESC ] ] Chng ta s ln lt nghin cu tng clause (mnh ) trong cu lnh ny. SELECT Clause Sau keyword (t kha) SELECT ta s c mt danh sch cc ct m ta mun select c cch nhau bng du ",". C 3 Keywords cn nhn mnh trong phn SELECT.

Distinct : Khi c keyword ny vo th s cho kt qu cc ct khng trng nhau. V d trong Orders table ca Norwind database (database mu di km vi SQL Server) cha gi tr trng lp (duplicate value) trong ct ShipCity. Nu ta mun select mt danh sch ShipCity trong mi city ch xut hin mt ln trong kt qu nhn c ta dng nh sau:

SELECT DISTINCT ShipCity, ShipRegion FROM Orders ORDER BY ShipCity

Top n : Nu ta mun select n hng u tin m thi ta c th dng Top keyword. Nu c thm ORDER BY th kt qu s c order trc sau mi select. Chng ta cng c th select s hng

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

37

da trn phn trm bng cch thm Keyword Percent vo. V d sau s select 10 hng u tin theo th t:
SELECT DISTINCT TOP 10 ShipCity, ShipRegion FROM Orders ORDER BY ShipCity

As : i khi chng ta mun cho SELECT statement d c hn mt cht ta c th dng mt alias (tc l t thay th hay t vit tt) vi keyword As hay khng c keyword As: table_name As table_alias hay table_name table_alias. V d:

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

Ngoi ra trong Select list ta c th select di dng mt expression nh sau:


SELECT FirstName + ' ' + LastName AS "Employee Name", IDENTITYCOL AS "Employee ID", HomePhone, Region FROM Northwind.dbo.Employees ORDER BY LastName, FirstName ASC

Trong v d trn ta select ct "Employee Name" l sn phm ghp li ca ct FirstName v LastName c cch nhau bng mt khong trng. Mt gi tr thuc loi identity lm ct "Employee ID". Kt qu s c sp theo th t t nh ti ln (ASC) (cn DESC l t ln ti nh) trong ct LastName c sp trc ri mi ti ct FirstName. The INTO Clause INTO Clause cho php ta select data t mt hay nhiu table sau kt qu s c insert vo mt table mi. Table ny c to ra do kt qu ca cu lnh SELECT INTO. V d:
SELECT FirstName, LastName INTO EmployeeNames FROM Employers

Cu lnh tn s to ra mt table mi c tn l EmployeeNames vi 2 ct l FirstName v LastName sau kt qu select c t table Employers s c insert vo table mi ny. Nu table EmployeeNames tn ti SQL Server s bo li. Cu lnh ny thng hay c s dng select mt lng data ln t nhiu table khc nhau vo mt table mi (thng dng cho mc ch tm thi (temporary table)) m khi phi thc thi cu lnh Insert nhiu ln.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

38

Mt cch khc cng select data t mt hay nhiu table v insert vo mt table khc l dng "Insert Into...Select...". Nhng cu lnh ny khng to ra mt table mi. Ngha l ta table phi tn ti trc. V d:
INSERT INTO EmployeeNames SELECT FirstName, LastName FROM Employers

Ch l khng c ch "Value" trong cu Insert ny. The GROUP BY and HAVING Clauses GROUP BY dng to ra cc gi tr tng (aggregate values) cho tng hng trong kt qu select c. Ch c mt hng cho tng gi tr ring bit (distinct) ca tng ct. Cc ct c select u phi nm trong GROUP BY Clause. Hy xem v d phc tp sau:
SELECT OrdD1.OrderID AS OrderID, SUM(OrdD1.Quantity) AS "Units Sold", SUM(OrdD1.UnitPrice * OrdD1.Quantity) AS Revenue FROM [Order Details] AS OrdD1 WHERE OrdD1.OrderID in (SELECT DISTINCT OrdD2.OrderID FROM [Order Details] AS OrdD2 WHERE OrdD2.UnitPrice > $100) GROUP BY OrdD1.OrderID HAVING SUM(OrdD1.Quantity) > 100

Trong v d trn u tin ta select nhng order ring bit (distinct) t Order Details table vi gi > 100. Sau tip tc select OrderID, "Units Sold", Revenue t kt qu trn trong "Units Sold" v Revenue l nhng aggregate columns (cho gi tr tng mt ct ca nhng hng c cng OrderID). HAVING Clause ng vai tr nh mt filter dng lc li cc gi tr cn select m thi. HAVING Clause thng i chung vi GROUP BY mc d c th xut hin ring l. UNION Uninon keyword c nhim v ghp ni kt qu ca 2 hay nhiu queries li thnh mt kt qu. V d: Gi s c table1(ColumnA varchar(10), ColumnB int) v table2(ColumnC varchar(10), ColumnD int). Ta mun select data t table1 v ghp vi data t table2 to thnh mt kt qu duy nht ta lm nh sau:
SELECT * FROM Table1 UNION ALL SELECT * FROM Table2

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

39

Nu khng c keyword ALL th nhng hng ging nhau t 2 table s ch xut hin mt ln trong kt qu. Cn khi dng ALL th cc hng trong 2 table u c trong kt qu bt chp vic lp li. Khi Dng Union phi ch hai chuyn: s ct select 2 queries phi bng nhau v data type ca cc ct tng ng phi compatible (tng thch).

Using JOINS
Trong phn ny chng ta s tm hiu v cc loi Join trong SQL Server. Bng cch s dng JOIN bn c th select data t nhiu table da trn mi quan h logic gia cc table (logical relationships). C th tm tt cc loi Join thng dng bng cc hnh sau:

Th t t tri sang phi: Inner Join, Left Outer Join, Right Outer Join, Full Outer Join Inner Joins Dng Inner Join select data t 2 hay nhiu tables trong gi tr ca cc ct c join phi xut hin c 2 tables tc l phn gch cho trn hnh. V d:
SELECT t.Title, p.Pub_name FROM Publishers AS p INNER JOIN Titles AS t ON p.Pub_id = t.Pub_id ORDER BY Title ASC

Left Outer Joins Dng Left Outer Join select data t 2 hay nhiu tables trong tt c ct bn table th nht v khng tn ti bn table th hai s c select cng vi cc gi tr ca cc ct c inner join. S ct select c s bng vi s ct ca table th nht. Tc l phn t mu trn hnh. V d:
USE Pubs SELECT a.Au_fname, a.Au_lname, p.Pub_name FROM Authors a LEFT OUTER JOIN Publishers p ON a.City = p.City ORDER BY p.Pub_name ASC, a.Au_lname ASC, a.Au_fname ASC

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 Right Outer Joins

40

Dng Right Outer Join select data t 2 hay nhiu tables trong tt c ct bn table th hai v khng tn ti bn table th nht s c select cng vi cc gi tr ca cc ct c inner join. S ct select c s bng vi s ct ca table th hai. Tc l phn t mu trn hnh. V d:
USE Pubs SELECT a.Au_fname, a.Au_lname, p.Pub_name FROM Authors a RIGHT OUTER JOIN Publishers p ON a.City = p.City ORDER BY p.Pub_name ASC, a.Au_lname ASC, a.Au_fname ASC

Full Outer Joins Dng Full Outer Join select data t 2 hay nhiu tables trong tt c ct bn table th nht v th hai u c chn cc gi tr bn hai table bng nhau th ch ly mt ln. Tc l phn t mu trn hnh. V d:
USE Pubs SELECT a.Au_fname, a.Au_lname, p.Pub_name FROM Authors a FULL OUTER JOIN Publishers p ON a.City = p.City ORDER BY p.Pub_name ASC, a.Au_lname ASC, a.Au_fname ASC

Cross Joins Dng Cross Join ghp data t hai table trong s hng thu c bng vi s hng ca table th nht nhn vi s hng ca table th hai. V d:
USE pubs SELECT au_fname, au_lname, pub_name FROM authors CROSS JOIN publishers WHERE authors.city = publishers.city ORDER BY au_lname DESC

l trong cu lnh ny khng c keyword "On". Mun hiu r hn v cc loi join bn cho chy th trn SQL Server v lm phn bi tp s 1. Tm li trong bi ny chng ta tm hiu data integrity trong SQL Server bng cch dng cc loi Constraint. Ngoi ra Chng ta cng bit qua v mt s k thut query nng cao. Sau bi hc ny cc bn cn lm bi tp s 1 h thng ha li kin thc hc t bi 1 n bi 5 trc khi bn hc tip bi s 6. Khi lm bi tp nh phi lm theo th t v tun th theo cc yu cu ca bi tp t ra. Khng nn b qua bc no.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

41

Stored Procedure and Advanced T-SQL


Trong bi ny chng ta s tm hiu mt s cch import v export data trong SQL Server. Sau s bn qua cc loi Stored Procedure v Cursor.

S dng bcp v BULK INSERT import data


bcp l mt command prompt dng import hay export data t mt data file (Text file hay Excel File) vo SQL Server hay ngc li. Thng khi mun chuyn mt s lng ln data t mt database system khc nh Oracle, DB2...sang SQL Server trc ht ta s export data ra mt text file sau import vo SQL Server dng bcp command. Mt trng hp thng dng hn l ta export data t SQL Server sang mt Microsoft Excel file v Excel file ny c th l input cho mt program hay mt database system khc. Chng ta cng c th chuyn data vo SQL Server dng cu lnh BULK INSERT. Tuy nhin BULK INSERT ch c th import data vo trong SQL Server ch khng th export data ra mt data file nh bcp. c th insert data vo SQL Server Database, data file phi c dng bng ngha l c cu trc hng v ct. Ch khi data c bulk copy (copy hng lot dng bcp hay BULK INSERT) vo mt table trong SQL Server th table phi tn ti v data c cng thm vo (append). Ngc li khi export data ra mt data file th mt file mi s c to ra hoc data file s b overwrite nu n tn ti. C php y ca lnh bcp c th xem trong SQL Server Books Online. y ch trnh by mt s v d n gin v cch s dng bcp command v BULK INSERT. V d 1: Gi s bn mun export data t table Orders trong PracticeDB (y l database c to ra trong bi tp s 1 ) ra mt text file trong cc ct c phn cch bng du ";". Bn c th lm nh sau: m DOS command prompt v nh vo dng lnh sau:
bcp PracticeDB..Orders out c:\Orders.txt -c T t;

Trong v d trn ta mun bulk copy table Orders ra mt text file trong :

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

42

out: copy data t table hay view ra mt data file (c:\Orders.txt). Ngc li ta c th dng switch in import data t text file vo SQL Server. -c: bulk copy dng kiu d liu Character (Char) (nu khng ch r th SQL Server s dng "TAB" character (\t) phn nh cc ct v dng new line character (\n) phn nh cc hng nh cc gi tr default). -t;: du ";" i sau switch "t" cho bit ta mun dng ";" phn nh cc ct (nu khng s dng gi tr mc nh nh trn) -T: dng (NT) Trust connection kt ni vi database. Ngha l nu user authenticated (cho php) vo c Windows system th ng nhin c s dng SQL Server m khng cn dng thm username v password no khc. V d 2: Thay v copy ton b table ta c th dng query select mt phn data v export ra text file nh sau:
bcp "Select * From practiceDB..Orders" queryout c:\Orders.txt -c -SVinhtai -Usa -Pabc

Trong v d ny ta select ton b data trong Orders table ra mt text file dng query v SQL Server authentication. queryout : cho bit y l mt query ch khng phi l table. -S : tn ca SQL Server (hay tn ca mt Instance) -U : SQL user name dng log on -P : password dng log on. V d 3 : dng BULK INSERT bulk copy data t text file vo SQL Server database. M Query Analyser (BULK INSERT l mt T-SQL command ch khng phi l mt command prompt utility) v nh vo cc dng sau :
BULK INSERT PracticeDB..Orders FROM 'c:\Orders.txt ' WITH (DATAFILETYPE = 'CHAR')

Trong v d trn DATAFILETYPE= 'CHAR' cho bit data c cha dng Char data type. N mun dng data type dng unicode th dng 'WIDECHAR' Ch : Cc switch trong bcp command l case-sensitive. Ngha l ch hoa v ch thng s c ngha khc nhau.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

43

Distributed Queries
i khi chng ta mun select data t nhng database system khc nh MS Access, Oracle, DB2... hay thm ch t mt SQL Server khc ta cn phi dng distributed query. SQL Server s dng k thut OLEDB v cc API chuyn cc query ny ti cc database system khc. C 2 cch truy cp vo cc database system khc l dng LINKED SERVER v Ad Hoc Computer Name. Linked Server: Linked Server l mt server o c dng truy cp vo cc database system khc. Mt khi setup th ta c th query data dng four-part name : linked_server_name.catalog.schema.object_name . Trong catalog thng tng ng vi database name, Schema tng ng vi database owner v object_name tng ng vi table hay view. V d: Gi s ta setup mt Linked Server vo Access database "PracticeDB.mdb" trong cc table u tng t nh PracticeDB database trong SQL Server (c to ra trong phn bi tp s 1). M Enterprise Manager -> Chn node Security ca local server -> Right-Click ln node Linked Server chn New Linked Server. Sau nhp vo tn ca Linked Server LinkedPracticeDB, trong phn Provider Name chn Microsoft Jet 4.0 OLEDB Provider. Trong phn Data Source nhp vo v tr ca Access database (C:\PracticeDB.mdb) v click OK. Ta s c Linked Server tn LinkedPracticeDB xut hin di phn Security/Linked Server. Gi s ta mun select data t Linked Server ny ta c th dng Query Analyser nh sau:
Select * from LinkedPracticeDB...Customers

Trong v d trn ta dng tn ca Linked Server v theo sau l ba chm (v truy cp vo database ta phi dng four-part name nhng trong trng hp ny ta dng default value nn khng cn cho bit tn ca Catalog v Schema nhng phi dng du chm phn bit tng phn). Ngoi cch trn ta c th dng pass-through query vi OPENQUERY function nh sau:
Select * from OPENQUERY(LinkedPracticeDB,'Select * from Customers')

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

44

Trong v d trn ta thy function OPENQUERY s tr v mt data set v c th nm sau keyword FROM nh mt table. Khi dng OPENQUERY function ta cn cho bit tn ca Linked Server v query m ta mun thc hin. Lu : function trong SQL Server c dng tng t nh l stored procedure. Ad Hoc Computer Name Ngoi cch dng Linked Server nh trnh by trn ta c th dng ad hoc computer name (ad hoc ngha l lm thi, tm thi). Ngha l i vi nhng database system m ta thng xuyn query th dng Linked Server cn i vi nhng query lu lu mi dng n th ta c th select data bng OPENROWSET hay OPENDATASOURCE functions V d: ta cng s select data t Access database nh trn dng OPENROWSET
Select * from OPENROWSET('Microsoft.jet.oledb.4.0','C:\PracticeDB.mdb'; 'admin'; '', Customers)

Trong v d trn khi dng OPENROWSET ta cn phi a vo tt c nhng thng tin cn thit connect vo database nh tn ca Provider, v tr ca file, username, password (trng hp ny khng c password) v tn ca table m ta mun select. Mi ln ta thc thi cu lnh trn SQL Server u kim tra security trong khi nu dng Linked Server th ch kim ta mt ln m thi. OPENROWSET tng t nh OPENQUERY ch n tr v mt rowset v c th t vo v tr ca mt table trong cu lnh query. Ngoi cch dng trn ta cng c th dng OPENDATASOURCE query nh sau:
Select * from OPENDATASOURCE('Microsoft.jet.oledb.4.0', 'Data Source = C:\PracticeDB.mdb; User ID = Admin; Password = ') ...Customers

Trong v d trn ta thy OPENDATASOURCE tr v mt phn ca four-part name (ngha l tng ng vi tn ca Linked Server) cho nn ta phi dng thm ba du chm.

Cursors
Nu gii thch mt cch ngn gn th cursor tng t nh recordset hay dataset trong programming. Ngha l ta select mt s data vo memory sau c th ln lt lm vic vi tng record bng cch Move Next...

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

45

C 3 loi cursors l Transact- SQL Cursors, API Cursors v Client Cursors. Trong Transact-SQL v API thuc loi Server Cursors ngha l cursors c load ln v lm vic bn pha server. Trong khun kh bi hc ny ta ch nghin cu Transact-SQL cursors. Transact-SQL cursors c to ra trn server bng cc cu lnh Transact-SQL v ch yu c dng trong stored procedures v triggers. Trc ht hy xem qua mt v d v cursor:
DECLARE @au_lname varchar(40), @au_fname varchar(20) DECLARE Employee_Cursor CURSOR FOR SELECT LastName, FirstName FROM Northwind.dbo.Employees OPEN Employee_Cursor FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Author:' + @au_fname + ' ' + @au_lname FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname END CLOSE Employee_Cursor DEALLOCATE Employee_Cursor

Trong v d trn ta s select LastName v FirstName t Employees table ca Northwind database v load vo Employee_Cursor sau ln lt in tn ca cc employee ra mn hnh. lm vic vi mt cursor ta cn theo cc bc sau: 1. Dng cu lnh DECLARE CURSOR khai bo mt cursor. Khi khai bo ta cng phi cho bit cu lnh SELECTs c thc hin ly data. 2. Dng cu lnh OPEN a data ln memory (populate data). y chnh l lc thc hin cu lnh SELECT vn c khai bo trn. 3. Dng cu lnh FETCH ly tng hng data t record set. C th l ta phi gi cu lnh FETCH nhiu ln. FETCH tng t nh lnh Move trong ADO recordset ch n c th di chuyn ti lui bng cu lnh FETCH FIRST, FETCH NEXT, FETCH PRIOR, FETCH LAST, FETCH ABSOLUTE n, FETCH RELATIVE n nhng khc ch l n ly data b vo trong variable (FETCH...FROM...INTO variable_name). Thng thng ta FETCH data trc sau loop cho ti record cui ca Cursor bng vng lp WHILE bng cch kim tra global variable @@FETCH_STATUS (=0 ngha l thnh cng).

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

46

4. Khi ta ving thm tng record ta c th UPDATE hay DELETE ty theo nhu cu (trong th d ny ch dng lnh PRINT) 5. Dng cu lnh CLOSE ng cursor. Mt s ti nguyn (memory resource) s c gii phng nhng cursor vn cn c khai bo v c th OPEN tr li. 6. Dng cu lnh DEALLOCATE phng thch hon ton cc ti nguyn dnh cho cursor (k c tn ca cursor). Lu l trong v d trn trc khi dng Cursor ta cng declare mt s variable (@au_fname v @au_lname) cha cc gi tr ly c t cursor. Bn c th dng Query Analyzer chy th v d trn.

Stored Procedures
Trong nhng bi hc trc y khi dng Query Analyzer chng ta c th t tn v save cc nhm cu lnh SQL vo mt file di dng script c th s dng tr li sau ny. Tuy nhin thay v save vo text file ta c th save vo trong SQL Server di dng Stored Procedure. Stored Procedure l mt nhm cu lnh Transact-SQL c compiled (bin dch) v cha trong SQL Server di mt tn no v c x l nh mt n v (ch khng phi nhiu cu SQL ring l). u im Ca Stored Procedure Stored Procedure c mt s u im chnh nh sau:

Performance : Khi thc thi mt cu lnh SQL th SQL Server phi kim tra permission xem user gi cu lnh c c php thc hin cu lnh hay khng ng thi kim tra c php ri mi to ra mt execute plan v thc thi. Nu c nhiu cu lnh nh vy gi qua network c th lm gim i tc lm vic ca server. SQL Server s lm vic hiu qu hn nu dng stored procedure v ngi gi ch gi mt cu lnh n v SQL Server ch kim tra mt ln sau to ra mt execute plan v thc thi. Nu stored procedure c gi nhiu ln th execute plan c th c s dng li nn s lm vic nhanh hn. Ngoi ra c php ca cc cu lnh SQL c SQL Sever kim tra trc khi save nn n khng cn kim li khi thc thi. Programming Framework : Mt khi stored procedure c to ra n c th c s dng li. iu ny s lm cho vic bo tr (maintainability) d dng hn do vic tch ri gia business rules (tc l nhng logic th hin bn trong stored procedure) v database. V d nu c mt s thay i no v mt logic th ta ch vic thay i code bn trong stored procedure m thi. Nhng

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

47

ng dng dng stored procedure ny c th s khng cn phi thay i m vn tng thch vi business rule mi. Cng ging nh cc ngn ng lp trnh khc stored procedure cho php ta a vo cc input parameters (tham s) v tr v cc output parameters ng thi n cng c kh nng gi cc stored procedure khc.

Security : Gi s chng ta mun gii hn vic truy xut d liu trc tip ca mt user no vo mt s tables, ta c th vit mt stored procedure truy xut d liu v ch cho php user c s dng stored procedure vit sn m thi ch khng th "ng" n cc tables mt cch trc tip. Ngoi ra stored procedure c th c encrypt (m ha) tng cng tnh bo mt.

Cc Loi Stored Procedure Stored procedure c th c chia thnh 5 nhm nh sau: 1. System Stored Prcedure : L nhng stored procedure cha trong Master database v thng bt u bng tip u ng sp_ . Cc stored procedure ny thuc loi built-in v ch yu dng trong vic qun l database (administration) v security. V d bn c th kim tra tt c cc processes ang c s dng bi user DomainName\Administrators bn c th dng sp_who @loginame='DomainName\Administrators' . C hng trm system stored procedure trong SQL Server. Bn c th xem chi tit trong SQL Server Books Online. 2. Local Stored Procedure : y l loi thng dng nht. Chng c cha trong user database v thng c vit thc hin mt cng vic no . Thng thng ngi ta ni n stored procedure l ni n loi ny. Local stored procedure thng c vit bi DBA hoc programmer. Chng ta s bn v cch to stored prcedure loi ny trong phn k tip. 3. Temporary Stored Procedure : L nhng stored procedure tng t nh local stored procedure nhng ch tn ti cho n khi connection to ra chng b ng li hoc SQL Server shutdown. Cc stored procedure ny c to ra trn TempDB ca SQL Server nn chng s b delete khi connection to ra chng b ct t hay khi SQL Server down. Temporary stored procedure c chia lm 3 loi : local (bt u bng #), global (bt u bng ##) v stored procedure c to ra trc tip trn TempDB. Loi local ch c s dng bi connection to ra chng v b xa khi disconnect, cn loi global c th c s dng bi bt k connection no. Permission cho loi global l dnh cho mi ngi

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

48

(public) v khng th thay i. Loi stored procedure c to trc tip trn TempDB khc vi 2 loi trn ch ta c th set permission, chng tn ti k c sau khi connection to ra chng b ct t v ch bin mt khi SQL Server shut down. 4. Extended Stored Procedure : y l mt loi stored procedure s dng mt chng trnh ngoi vi (external program) vn c compiled thnh mt DLL m rng chc nng hot ng ca SQL Server. Loi ny thng bt u bng tip u ng xp_ .V d, xp_sendmail dng gi mail cho mt ngi no hay xp_cmdshell dng chy mt DOS command... V d xp_cmdshell 'dir c:\' . Nhiu loi extend stored procedure c xem nh system stored procedure v ngc li. 5. Remote Stored Procedure : Nhng stored procedure gi stored procedure server khc. Vit Stored Procedure Tn v nhng thng tin v Stored Procedure khi c to ra s cha trong SysObjects table cn phn text ca n cha trong SysComments table. V Stored Procedure cng c xem nh mt object nn ta cng c th dng cc lnh nh CREATE, ALTER, DROP to mi, thay i hay xa b mt stored procedure. Chng ta hy xem mt v d sau v Stored Procedure: to mt stored procedure bn c th dng Enterprise Manager click ln trn Stored Procedure -> New Stored Procedure.... Trong v d ny ta s to ra mt stored procedure insert mt new order vo Orders table trong Practice DB. insert mt order vo database ta cn a vo mt s input nh OrderID, ProductName (order mn hng no) v CustomerName (ai order). Sau ta tr v kt qu cho bit vic insert c thnh cng hay khng. Result = 0 l insert thnh cng.
CREATE PROCEDURE AddNewOrder @OrderID smallint, @ProductName varchar(50), @CustomerName varchar(50), @Result smallint=1 Output AS DECLARE @CustomerID smallint BEGIN TRANSACTION If not Exists(SELECT CustomerID FROM Customers WHERE [Name]=@CustomerName) --This is a new customer. Insert this customer to the database BEGIN SET @CustomerID= (SELECT Max(CustomerID) FROM Customers) SET @CustomerID=@CustomerID+1

http://ebooks.vdcmedia.com

HC SQL SERVER 2000


INSERT INTO Customers VALUES(@CustomerID,@CustomerName) If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) --This order exists and could not be added any more so Roll back BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else --This is a new order insert it now BEGIN INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Else --The customer exists in DB go ahead and insert the order BEGIN If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) --This order exists and could not be added any more so Roll back BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else --This is a new order insert it now BEGIN INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Print @Result Return

49

to ra mt stored procedure ta dng lnh CREATE PROCEDURE theo sau l tn ca n (nu l temporary stored procedure th thm du # trc tn ca procedure. Nu mun encrypt th dng WITH ENCRYPTION trc ch AS) v cc input hoc ouput parameters. Nu l output th thm keyword OUTPUT ng sau parameter. Ta c th cho gi tr default cng lc vi khai bo data type ca parameter. K t sau ch AS l phn body ca stored procedure. Trong v d trn trc ht ta khai bo mt bin @CustomerID sau bt u mt transaction bng BEGIN TRANSACTION (ton b cng vic insert ny c thc hin trong mt Transaction ngha l hoc l insert thnh cng hoc l http://ebooks.vdcmedia.com

HC SQL SERVER 2000

50

khng lm g c- all or nothing). Trc ht ta kim tra xem ngi khch hng l ngi mi hay c. Nu l ngi mi th ta "tin tay" insert vo Customers table lun cn nu khng th ch insert vo Orders table m thi. Nu l ngi customer mi ta ly CustomerID ln nht t Customers table b vo bin @CustomerID v sau tng ln mt n v dng cho vic Insert Customer dng k tip. Sau khi insert ngi customer mi ta tip tc cng vic bng vic kim tra xem Order mun insert c tn ti cha (v nu order tn ti th khi insert SQL Server s bo li do OrderID l Primary key). Nu nh order trn v l do no c trong DB th ta roll back v tr kt qu =1 cn nu khng th ta insert mt order mi vo v commit transaction vi kt qu tr v =0. Tng t nh vy nu ngi customer tn ti (sau ch else u tin) th ta ch vic insert order ging nh trn. Trong mi trng hp k trn ta u in ra kt qu v return. V d trn y ch mang tnh hc hi cn trn thc t database c th phc tp hn nhiu nn vic vit stored procedure i hi kin thc vng chc v SQL v k nng v programming. Mun hiu r hn v bi hc ny bn cn lm bi tp s 2. Tm li trong bi ny chng ta tm hiu mt s k thut import v export data . ng thi bit qua cc cch select data t cc database system khc dng distributed query. Nhng quan trng nht v thng dng nht l cc stored procedures. Bn cn hiu r vai tr ca stored procedure v bit cch to ra chng. V kin thc v database ni chung v SQL Server ni ring kh rng nn trong khun kh mt bi hc chng ti khng th trnh by cn k tng chi tit v i khi c hi dn p cho nn bn cn c i c li nhiu ln nm c chnh v phi xem thm sch (nu khng c sch th phi xem thm SQL Books Online). Sau bi hc ny cc bn cn lm bi tp s 2 h thng ha li kin thc hc. Khi lm bi tp nn lm theo th t v tun th theo cc yu cu ca bi tp t ra. Khng nn b qua bc no.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

51

Triggers And Views


Trong bi ny chng ta s tm hiu ng dng ca mt loi stored procedure c bit gi l Triggers v dng Views th hin data trong mt hay nhiu table nh th no.

Triggers
Trigger l mt loi stored procedure c bit c execute (thc thi) mt cch t ng khi c mt data modification event xy ra nh Update, Insert hay Delete. Trigger c dng m bo Data Integrity hay thc hin cc business rules no .

Khi no ta cn s dng Trigger:

Ta ch s dng trigger khi m cc bin php bo m data intergrity khc nh Constraints khng th tha mn yu cu ca ng dng. Nn nh Constraint thuc loi Declarative Data Integrity cho nn s kim tra data trc khi cho php nhp vo table trong khi Trigger thuc loi Procedural Data Integrity nn vic insert, update, delete xy ra ri mi kch hot trigger. Chnh v vy m ta cn cn nhc trc khi quyt nh dng loi no trong vic m bo Data Integrity.

Khi mt database c denormalized (ngc li qu trnh normalization, l mt qu trnh thit k database schema sao cho database cha data khng tha khng thiu) s c mt s data tha (redundant ) c cha trong nhiu tables. Ngha l s c mt s data c cha cng mt lc hai hay nhiu ni khc nhau. Khi m bo tnh chnh xc th khi data c update mt table ny th cng phi c update mt cch t ng cc table cn li bng cch dng Trigger. V d: ta c table Item trong c field Barcode dng xc nh mt mt hng no . Item table c vai tr nh mt cun catalog cha nhng thng tin cn thit m t tng mt hng. Ta c mt table khc l Stock dng phn nh mn hng c thc trong kho nh c nhp v ny no c cung cp bi i l no, s lng

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

52

bao nhiu (tc l nhng thng tin v mn hng m khng th cha trong Item table c)...table ny cng c field Barcode xc nh mn hng trong kho. Nh vy thng tin v Barcode c cha hai ni khc nhau do ta cn dng trigger m bo l Barcode hai ni lun c synchonize (ng b).

i khi ta c nhu cu thay i dy chuyn (cascade) ta c th dng Trigger bo m chuyn . Ngha l khi c s thay i no table ny th mt s table khc cng c thay i theo m bo tnh chnh xc. V d nh khi mt mn hng c bn i th s lng hng trong table Item gim i mt mn ng thi tng s hng trong kho (Stock table) cng phi gim theo mt cch t ng. Nh vy ta c th to mt trigger trn Item table mi khi mt mn c bn i th trigger s c kch hot v gim tng s hng trong Stock table.

c im ca Trigger:

Mt trigger c th lm nhiu cng vic (actions) khc nhau v c th c kch hot bi nhiu hn mt event. V d ta c th vit mt trigger c kch hot bi bt k event no nh Update, Insert hay Delete v bn trong trigger ta s vit code gii quyt cho tng trng hp. Trigger khng th c to ra trn temporary hay system table. Trigger ch c th c kch hot mt cch t ng bi mt trong cc event Insert, Update, Delete m khng th chy manually c. C th p dng trigger cho View. Khi mt trigger c kch hot th data mi va c insert hay mi va c thay i s c cha trong Inserted table cn data mi va c delete c cha trong Deleted table. y l 2 table tm ch cha trn memory v ch c gi tr bn trong trigger m thi (ngha l ch nhn thy v c query trong trigger m thi). Ta c th dng thng tin trong 2 table ny so snh data c v mi hoc kim tra xem data mi va thay i c hp l trc khi commit hay roll back. (Xem thm v d bn di) C 2 loi triggers (class) : INSTEAD OF v AFTER. Loi INSTEAD OF s b qua (bybass) action kch hot trigger m thay vo s thc hin cc dng lnh SQL bn trong Trigger. V d ta c mt

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

53

Update trigger trn mt table vi cu INSTEAD OF th khi table c update thay v update SQL Server s thc hin cc lnh c vit sn bn trong trigger. Ngc li loi AFTER (loi default tng ng vi keyword FOR) s thc hin cc cu lnh bn trong trigger sau khi cc action to nn trigger xy ra ri.

To Mt Trigger Nh Th No?
C php cn bn to ra mt trigger c dng nh sau: CREATE TRIGGER trigger_name ON table_name or view_name FOR trigger_class and trigger_type(s) AS Transact-SQL statements Nh vy khi to ra mt trigger ta phi ch r l to ra trigger trn table no v c trigger khi no (insert, update hay delete. Sau ch AS l cc cu lnh SQL x l cng vic. Ta hy nghin cu mt ng dng thc tin sau. Gi s ta vit mt application cho php user c th Insert, Update v Delete nhng thng tin nm trong database. User ny thng l nhng ngi khng thng tho lm v computer m chng ti thng gi a l "b tm". Vo mt ngy p tri, "b tm" mt my ti xanh n cu cu ta v l tay "delete" nhng thng tin kh quan trng v hy vng ta c th phc hi d liu dm. Nu chng ta khng phng xa trc khi vit application th coi nh cng v phng cu cha v data hon ton b delete. Nhng nu bn l mt "guru" bn s gt g "chuyn ny kh lm!" nhng sau bn ch tn vi pht ng h rollback. Mun lm c chuyn ny chng ta phi dng mt "chiu" gi l Audit (kim tra hay gim st). Tc l ngoi cc table chnh ta s thm cc table ph gi l Audit tables. Bt k hot ng no ng chm vo mt s table quan trng trong database ta u ghi nhn vo trong Audit table. V d khi user update hay delete mt record trong table no th trc khi update hay delete ta s m thm di chuyn record sang Audit table ri mi update hay delete table chnh. Nh vy nu c chuyn g xy ra ta c th d dng rollback (tr record v ch c).

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 V d:

54

Ta c table Orders trong PracticeDB. audit cc hot ng din ra trn table ny ta to ra mt audit table vi tn Aud_Orders vi cc column ging y ht vi Orders table. Ngoi ra ta thm vo 2 columns :

Audit_Type : vi cc gi tr c th l 'I','U','D' ghi nhn record c Insert, Update hay Delete Date_Time_Stamp : Data Type thuc loi DateTime dng ghi nhn thi im xy ra s thay i, c vai tr nh mt con du.

(Nu trong mi trng nhiu user th ta thm mt column UserID ghi nhn user no thay i). Sau ta s to ra 3 trigger dng cho vic audit nh sau:
--Insert Trigger CREATE TRIGGER [AuditInsertOrders] ON [dbo].[Orders] FOR Insert AS insert into aud_orders select *,'I',getdate() From inserted --Update Trigger CREATE TRIGGER [AuditUpdateOrders] ON [dbo].[Orders] for UPDATE AS insert into aud_orders select *,'U',Getdate() from deleted --Delete Trigger CREATE TRIGGER [AuditDeleteOrders] ON [dbo].[Orders] FOR DELETE AS insert into aud_orders select *,'D',getdate() From deleted

Trong v d trn khi user insert mt record th record mi va c insert s nm trong inserted table nh trnh by phn trn. Do ta s select tt c cc column trong inserted table cng thm Audit Type "I" v dng hm GetDate() trong SQL Server ly system date time dng cho Date_Time_Stamp column, sau insert vo Aud_Orders table. Tng t vi trng hp Update v Delete, record c update hay delete nm trong deleted table. Nh vy tr li trng hp th d trn nu "b tm" yu cu ta c th vo tm kim trong audit table phc hi li record. Ngoi ra ta c th dng table ny tm ra th phm xo hay sa cha data khi cn thit.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

55

to ra hay xem mt trigger bng Enterprise Manager bn lm nh sau: Right-Click ln table m bn mun to trigger->All Tasks-> Manage Triggers. Lu : i Khi ta ch mun trigger thc s hot ng khi mt hay vi column no c Update ch khng phi bt k column no. Khi ta c th dng hm Update(Column_Name) kim tra xem column no c b update hay khng. V d: To mt trigger cho Customer table. Bn trong Trigger (sau ch AS) ta c th kim tra xem nu column First_Name hay Last_Name b thay i th mi hnh ng nu khng th khng lm g c
IF UPDATE (first_name) OR UPDATE (Last_Name) BEGIN Do some conditional processing when either of these columns are updated. END

Nu mun kim tra nhiu columns ta c th dng hm khc l Columns_Updated() . Xin xem thm trong SQL Server Books Online bit thm chi tit v cch s dng.

Views
nh ngha mt cch n gin th view trong SQL Server tng t nh Query trong Access database. View c th c xem nh mt table o m data ca n c select t mt stored query. i vi programmer th view khng khc chi so vi table v c th t v tr ca table trong cc cu lnh SQL. c im ca View l ta c th join data t nhiu table v tr v mt recordset n. Ngoi ra ta c th "xo nu" data (manipulate data) trc khi tr v cho user bng cch dng mt s logic checking nh (if, case...). V d:
Create View OrderReport As Select OrderID, (case when [Name] is null then 'New Customer' else [Name] end )As CustomerName, ProductName, DateProcessed From Customers Right Outer Join Orders on Customers.CustomerID=Orders.CustomerID

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

56

Trong v d trn ta ch yu tr v data t Orders table trong PracticeDB nhng thay v display CustomerID vn khng c nhiu ngha i vi user ta s display tn ca customer bng cch join vi Customer table. Nu Customer Name l Null ngha l tn ca customer t order khng tn ti trong system. Thay v Null ta s display "New Customer" d nhn hn cho user. Ni chung cu lnh SQL trong View c th t rt n gin nh select ton b data t mt table cho n rt phc tp vi nhiu tnh nng programming ca TSQL. View Thng c Dng Vo Vic G? View thng c s dng vo mt s cng vic sau:

Tp trung vo mt s data nht nh : ta thng dng view select mt s data m user quan tm hay chu trch nhim v loi b nhng data khng cn thit.

V d: Gi s trong table ta c column "Deleted" vi gi tr l True hay False nh du mt record b delete hay khng. Vic ny i khi c dng cho vic Audit. Ngha l trong mt ng dng no khi user delete mt record no , thay v ta physically delete record ta ch logically delete bng cch nh du record l c "Deleted" phng user yu cu roll back. Nh vy ch yu ta ch quan tm n data cha delete cn data c nh du deleted ch c khi no cn roll back hay audit m thi. Trong trng hp ny ta c th to ra mt view select data m Deleted=False v lm vic ch yu trn view thay v ton b table.

n gin ha vic x l data: i khi ta c nhng query rt phc tp v s dng thng xuyn ta c th chuyn n thnh View v i x n nh mt table, nh vy s lm cho vic x l data d dng hn. Customize data: Ta c th dng view lm cho users thy data t nhng gc khc nhau mc d h ang dng mt ngun data ging nhau. V d: Ta c th to ra views trong nhng thng tin v customer c th hin khc nhau ty login ID l normal user hay manager. Export v Import data: i khi ta mun export data t SQL Server sang cc ng dng khc nh Excel chng hn ta c th dng view join nhiu table v export dng bcp.

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

57

Khi s dng view ta c th select,insert, update, delete data bnh thng nh vi mt table. V d:
Select * From OrderReport Where DateProcessed <'2003-01-01'

Lu : Trong Enterprise Edition (v Developer Edition) ta c th to Index cho View nh cho table. Index s c bn n trong cc bi sau. Mun hiu r hn v bi hc ny bn cn lm bi tp s 3. Nh vy trong bi ny chng ta tm hiu Trigger, View trong SQL Server v mt s ng dng ca n. Ni chung view thng c dng tru tng ha (abstract) hay lc raw data (data th) trc khi tr v cho user trong khi trigger thng c dng bo m tnh integrity ca database.

Exercise 1: Advanced

Query

Please follow those steps to practise: 1. Create a new database called PracticeDB (using Enterprise Manager (EP) or Query Analyser (QA)) 2. Create 2 tables and insert data as follows (use EP or QA) : Customers CustomerID Name (Int) (nVarChar(50)) 1 John Nguyen 2 Bin Laden 3 Bill Clinton 4 Thomas Hardy 5 Ana Tran 6 Bob Carr Orders OrderID CustomerID ProductName (Int) (Int) (nvarchar(50)) 1 2 Nuclear Bomb 2 3 Missile 3 2 Jet-1080 4 1 Beers 5 4 Asian Food 6 7 Wine http://ebooks.vdcmedia.com DateProcessed (datetime) 2002-12-01 2000-03-02 2003-08-03 2001-05-12 2002-10-04 2002-03-08

HC SQL SERVER 2000 7 8 Milk 2002-05-02 3. Query data using Select statement with the following Join (use QA) a. Inner Join b. Left Outter Join c. Right Outer Join d. Full Outer Join e. Cross Join The result of the query must be displayed in the following format OrderID CustomerName ProductName DateProcessed

58

( Hints: Based on the data supplied and your knowledge about various kind of joins guess the results then after each select compare it with your guessing to check if what you understand is correct. You also use As keyword or alias in the queries) 4. Using Select * Into...From statement to create a new table called Processed Orders and populate the new table with the data selecting from Orders table Where DateProcessed is earlier than 2002-10-05. (use QA) 5. Using Insert Into...Select statement to get the top 1 record from Orders table and insert into the ProcessedOrders (use QA) 6. Delete a record from ProcessedOrders where the date processed is 2002-10-04. (use QA) 7. Using Union to merge the two data set from Orders and ProcessedOrders into one data set. (use QA) 8. Apply Constraints (use EP or QA) a.Apply the Primary Constraint to the ID column in the tables b. Apply the Foreign Key Constraint in the Orders table. c. Apply the Check Constraint to the DateProcessed column so that the date is within 1970-01-01 2005-01-01 and try to insert invalid data to see if SQL rejects. d. Apply Unique Constraint to the CustomerName column of Customers 9. Back up database and Restore to somewhere else (on a different server or on the same server but with different database name) (use EP or QA) 10. Truncate and Drop the ProcessedOrders table (use QA)

http://ebooks.vdcmedia.com

HC SQL SERVER 2000 Exercise 2: Manipulate

59

Data and Stored Procedure

Please follow those steps to practise: 9. Use bcp to export all data from Orders table of PracticeDB to c:\Orders.txt (or to c:\Orders.csv) 10. Change some data in the c:\Orders.txt and save. Then import to Orders table from the text file using bcp 11. Import Orders.txt to Orders table using BULK INSERT 12. Create a Linked Server LinkedPracticeDB which link to an Access database PracticeDB.mdb (firstly you have to create an Access database similar to PracticeDB in SQL Server and input some data). Then do a select data using fourpart name and OPENQUERY 13. Using ad hoc computer name with OPENROWSET and OPENDATASOURCE functions to select data from PracticeDB.mdb 14. Create the following Cursor DECLARE @au_lname varchar(40), @au_fname varchar(20) DECLARE Employee_Cursor CURSOR FOR SELECT LastName, FirstName FROM Northwind.dbo.Employees OPEN Employee_Cursor FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Author:' + @au_fname + ' ' + @au_lname FETCH NEXT FROM Employee_Cursor INTO @au_lname, @au_fname END CLOSE Employee_Cursor DEALLOCATE Employee_Cursor 15. Create the following stored procedure and try to execute with some values CREATE PROCEDURE AddNewOrder @OrderID smallint, @ProductName varchar(50), @CustomerName varchar(50), @Result smallint=1 Output AS DECLARE @CustomerID smallint BEGIN TRANSACTION If not Exists(SELECT CustomerID FROM Customers WHERE [Name]=@CustomerName) BEGIN http://ebooks.vdcmedia.com

HC SQL SERVER 2000 SET @CustomerID= (SELECT Max(CustomerID) FROM Customers) SET @CustomerID=@CustomerID+1 INSERT INTO Customers VALUES(@CustomerID,@CustomerName) If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else BEGIN INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Else BEGIN If Exists(SELECT OrderID FROM [Orders] WHERE OrderID=@OrderID) BEGIN SELECT @Result=1 ROLLBACK TRANSACTION END Else BEGIN INSERT INTO [Orders](OrderID,ProductName,CustomerID) VALUES(@OrderID,@ProductName,@CustomerID) SELECT @Result=0 COMMIT TRANSACTION END END Print @Result Return 9. Using VB 6 or VB.NET to execute the AddNewOrder stored procedure 10. Using xp_cmdshell extended stored procedure to send a message (xp_cmdshell net send Hello)

60

http://ebooks.vdcmedia.com

HC SQL SERVER 2000

61

Exercise 3: Triggers And Views Please follow those steps to practise: 16. Create 3 triggers to audit the changes to the Orders table. Tips: Create an audit table aud_Orders with the same colums as in the Orders table and 2 more colums AuditType(with values either I,U,D) and DateTimeStamp(which will record the date time stamp of changes) Create Update Triggers (Similar to Insert,Delete) : when a record in the Orders table is updated the trigger will move the old record to the audit table(record the date time and mark it as U) 17. Create a view that shows all the orders with the following colums: OrderID,CustomerName,ProductName,DateProcessed,Status Business rules: If CustomerName is a null value New Customer is returned If DateProcessed is later than current date return Pending, if DateProcessed is ealier return History in Status colum. Tips: a. Using Case When ...Then statement in the view b. Using Getdate() function to get the current date time

http://ebooks.vdcmedia.com

You might also like