You are on page 1of 72

Chng 5 - LP TRNH T-SQL

Lecturer:
Email:
Website:

Nguyn c Cng - FIT


cuongnguyenduc@gmail.com
http://www.nguyenduccuong.com

Ni dung

Tng quan

Bin

Cu trc iu khin

Th tc (store procedures)

Hm(function)

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 2

TNG QUAN
1. S dng T-SQL lp trnh cc script v sp thc
hin cc tc v c th trn server. Chng trnh
bao gm lnh sql, bin, cu trc iu khin .
2. Cc khi nim c bn:
a.

nh danh (identifiers): tn cc i tng


trong CSDL
Quy tc:

Ti a 128 k t
Bt u t k t a z, hoc cc k t @, #
Cc nh danh c khong trng phi t trong []

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 3

TNG QUAN

Kiu d liu: c 2 loi

System- supplied data type

User defined data type

Batch: tp cc cu lnh T-SQL lin tip kt thc


bng lnh GO

Script: tp ca 1 hoc nhiu cc b lnh c


lu thnh mt tp tin .SQL

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 4

BIN (Variable)
Bin: c 2 loi bin: bin cc b v bin ton cc
1. Bin cc b (Local variable):

c khai bo bn trong mt sp , mt batch

Phm vi hot ng t v tr khai bo n khi


kt thc sp, batch

Tn bt u bng k t @

Khai bo bin:
DECLARE @ VariableName var_type
V d: DECLARE @vEmpID int

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 5

BIN (Variable)

Gn gi tr cho bin:
SET @VariableName = expression
Hoc:
SELECT{@VariableName=expression} [,n]
V d 1:
DECLARE @temp_name varchar(20)
SELECT @temp_name = companyname
FROM customers
WHERE customerid = adsff

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 6

BIN (Variable)
V d 2:
DECLARE @temp_city varchar(10)
SET @temp_city = london
SELECT * FROM Customers
WHERE city = @temp_city
V d 3:
DECLARE @temp_CustID Char(5), @temp_name
varchar(50)
SET @temp_CustID = ALFKI
SELECT @temp_name = CompanyName FROM Customers
Where CustomerID = @temp_CustID
PRINT CustomerID is + @temp_CustID + and Name is +
@temp_name
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 7

BIN (Variable)
2.

Bin ton cc (Global Variables): Thc cht l cc


hm c sn trong SQL Server.
Khng th gn gi tr cho bin
Bin ton cc khng c kiu
Tn bin bt u bng @@

@@VERSION:

V d: Select @@ version

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 8

BIN (Variable)

@@SERVERNAME: tn sever
V d: select @@SERVERNAME

@@ROWCOUNT: tr v s dng b nh hng bi


lnh thc thi gn nht
V d:
Update Employees set LastName = Brooke
Where LastName =Brook
If(@@rowcount=0)
begin
print Khng dng no c cp nht
return
end

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 9

BIN (Variable)

@@ERROR: tr v s th t li ca lnh thc thi


sau cng, nu tr v 0 th cu lnh hon thnh

@@IDENTITY: tr v s IDENTITY pht sinh sau


cng

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 10

Cu trc iu khin
CASE Function:
a)

b)

C 2 dng
Simple CASE function:
CASE input_expression
WHEN when_expression THEN
result_expression
[ ...n ]
[ELSE else_result_expression ]
END
Searched CASE function:
CASE
WHEN Boolean_expression THEN
result_expression [ ...n ]
[ ELSE else_result_expression ]
END

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 11

Cu trc iu khin
V d 1:
SELECT Category =
CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Modern Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Traditional Cooking
ELSE 'Not yet categorized
END
CAST(title AS varchar(25)) AS 'Shortened Title',
price AS Price FROM titles WHERE price IS NOT NULL
ORDER BY type, price COMPUTE AVG(price) BY type
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 12

Cu trc iu khin
V d 2:
SELECT ProductID, Quantity, UnitPrice, [discount%]=
CASE
WHEN Quantity <=5 THEN 0.05
WHEN Quantity BETWEEN 6 and 10 THEN 0.07
WHEN Quantity BETWEEN 11 and 20 THEN 0.09
ELSE
0.1
END
FROM [Order Details]
ORDER BY Quantity, ProductId
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 13

Cu trc iu khin
IF ELSE:
IF boolean_expression
{sql_statement | statement_block}
[ELSE boolean_expression
{sql_statement | statement_block}]
BEGIN END: Khi lnh
BEGIN
{sql_statement | statement_ block}
END

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 14

Cu trc iu khin
V d:
IF ( SELECT COUNT(*) FROM authors
WHERE contract =0) >0
BEGIN
PRINT 'These authors do not have contracts on file: '
SELECT au_lname, au_fname, au_id
FROM authors
WHERE contract=0
END
ELSE
BEGIN
PRINT 'All authors have contracts on file.'
END
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 15

Cu trc iu khin
WHILE: WHILE boolean_expression
{sql_statement | statement_block}
[BREAK]
{sql_statement | statement_block}
[CONTINUE]

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 16

Cu trc iu khin
V d 1: DECLARE @Counter INT
SET @counter=0
WHILE (@counter<20)
BEGIN
INSERT INTO Pubs
VALUES ('last'+CAST(@counter as char(2)),
'First')
SET @counter=@counter+1
END

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 17

Cu trc iu khin
V d 2
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles SET price = price * 2
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 18

Cu trc iu khin
PRINT: In thng tin ra mn hnh kt qu ca SQL
PRINT any ACII
Text|@local_variable|@@FUNTION| String_expr
RETURN:
RETURN [integer_expression]
WAITFOR: SQL tm dng
WAITFOR { DELAY 'time' | TIME 'time' }
V d:
BEGIN
WAITFOR TIME '22:20'
EXECUTE update_all_stats
END
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 19

Cu trc iu khin
RAISERROR: Gi li n ngi dng nh mt li
h thng
RAISERROR({msg_id | msg_str} { , severity ,
state }
[ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]

Msg_id: m thng bo, c lu trong bng


sysmessage m thng bo ca ngi dng c bt
u trn 50000
Msg_str: Ni dung thng bo, ti a 400 k t
truyn tham s vo trong thng bo dng dng
%<Loi K t>

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 20

Cu trc iu khin

Loi k t:

D hoc I: s nguyn

O: Octal khng du

P : Con tr

S: chui

U : s nguyn khng du

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 21

Bi tp

Bi 1: Khai bo mt bin @maso kiu s nguyn,


gn gi tr 7 cho bin @maso, vit cu lnh ly ra
danh sch cc sn phm c masp nh hn gi tr
cha trong bin @maso.

Gii
declare @maso int
set @maso=7
select * from products where productid<=@maso

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 22

Bi tp

Bi 2: Khai bo v gi gi tr i din cho ni


chuyn hng ca ho n. Kim tra xem ni ny c
bao nhiu ho n, gi s l n. In ra cau thng bo
cho bit C <n> ho n. Nu khng c ho
n no c th in ra cu Khng c ho n. Khi
chy on batch th thay i gi tr ca bin kim
chng kt qu.

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 23

Bi tp
GII
declare @NoiChuyen int
declare @SoHD int
set @NoiChuyen=1
set @sohd=(select count(orderid) as sohoadon
from orders
where ShipVia=@NoiChuyen)
if (@sohd)>0
select 'Co '+cast(@sohd as nvarchar(10))+ ' hoa don'
else
select 'Khong co hoa don'

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 24

Bi tp

Bi 3: Vit mt vng lp WHILE nhp 10 mu


tin ty vo bng HOCVIEN (MAHV, TENHV, LOP),
vi bng d liu nh sau:

1 Hoc vien 1

CDTH3

2 Hoc vien 2

CDTH3

10.

Hoc vien 10 CDTH3

..

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 25

Bi tp
GII
create table HOCVIEN (MAHV int , TENHV
nvarchar(12), LOP nvarchar(5))
go
declare @i int
set @i=1
while(@i<=10)
begin
insert hocvien values(@i,'Hoc Vien ' + cast(@i as
nvarchar(12)), 'CDTH3')
set @i=@i+1
end
GO
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 26

Bi tp

Bi 5: Vit mt cu lnh SELECT c s dng CASE


dng hin th MaSP, TenSp, Soluong, Dongia,
Huehong. Trong HueHong = Soluong *
DonGia*TiLe, TiLe = 5% nu Soluong <5
= 6% nu 10>soluong >=5
= 8% NU 15>Soluong>=10
=10% nu Soluong>=15

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 27

Bi tp
GII
select p.ProductID as MaSP,ProductName as
TenSp,Quantity as Soluong, p.UnitPrice as
Dongia,Huehong =Quantity*p.UnitPrice*case
when Quantity<5 then 0.05
when Quantity>=5 and Quantity<10 then 0.06
when Quantity>=10 and Quantity<15 then 0.08
else 0.1
end
from "Order Details" o,Products p
where o.productid=p.productid

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 28

LP TRNH T-SQL
TH TC V HM
(STORED PROCEDURES AND FUNCTION)

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 29

Gii thiu

Lp trnh theo module

Thc thi nhanh hn

Gim lu lng trn mng

An ninh bo mt hn

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 30

A. STORE PROCEDURE
C IM:

1.

Truyn tham s.

Gi th tc khc.

Tr v cc gi tr tham s, chuyn gi tr tham


s c ho cc th tc c gi.

Tr v gi tr trng thi th tc l thnh cng


hay khng thnh cng

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 31

A. STORE PROCEDURE
2/CC LOI SP:

System SP: lu trong CSDL Master (sp)


vd: master.dbo.sp_helptext

V d: Mun bit tt c cc tin trnh ang thc


hin bi user no: sp_who @loginame='sa'

Extended SP: bin dch thnh cc file .DLL

xem tn file dll tng ng dng


sp_helptext ESP_name

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 32

A. STORE PROCEDURE
2/CC LOI SP:
User_defined : c th l local, temporary, remote

Local sp: c ngi dng to ra nh l mt i


tng ca database, dng thc thi cc task trong
database, c th to sp ngay trong master db.

Temporary sp: C 2 loi: local v global (tn bt


u bng # v ##).

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 33

A. STORE PROCEDURE
3/To stored Procedures

To sp bng Managerment Studio

To bng wizard

Bng lnh T_SQL: Trong QA c th test


trc khi thi hnh sp.
C php :
CREATE PROCEDURE procedure_name
[WITH option]
AS
sql_statement [...]
C th vit tt lnh l CREATE PROC.
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 34

A. STORE PROCEDURE
3/To stored Procedures
V d:
CREATE PROCEDURE OrderSummary AS
SELECT Ord.EmployeeID,
SummSales = SUM(OrDet.UnitPrice *
OrDet.Quantity)
FROM Orders AS Ord JOIN [Order Details] AS
OrDet ON (Ord.OrderID = OrDet.OrderID)
GROUP BY Ord.EmployeeID

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 35

A. STORE PROCEDURE

Xem ni dung th tc :
sp_helptext Procedure_name

Xem thng tin v ngi to :


sp_help Procedure_name

Xem cc i tng m cc lnh trong sp tham


chiu n :
sp_depends Procedure_name

Lit k tt c cc sp trong database :


sp_stored_procedures

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 36

A.

STORED PROCEDURES
4/Thi hnh stored Procedures :
Phi t lnh thi hnh sp dng u ca mt query,
hay dng u ca mt batch.
V d:

sp_help Orders

Select * from Customers


Bt u dng lnh gi sp bng EXECUTE hay EXEC
V d
USE Northwind
GO
Select * from Customers
EXEC
sp_help Orders

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 37

A.

STORED PROCEDURES

Nu gi sp trong db khc, phi vit tn y


db_name.owner.sp_name
M ho ngn user c ni dung m sp s dng
WITH ENCRYPTION trong lnh to sp
C php:
CREATE PROCEDURE procedure_name
WITH ENCRYPTION
AS
sql_statement [...n]
GO

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 38

A.

STORED PROCEDURES
5/ Sa i ni dung sp:
C php
ALTER PROCEDURE procedure_name
[WITH option]
AS
sql_statement [...n]
GO

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 39

A. STORED PROCEDURES
6/ Xo sp
DROP PROC
owner.stored_procedure_name
V d:
DROP Proc
OrderSummary

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 40

A. STORED PROCEDURES
7/ S dng tham s trong sp
a)

Input parameter: Dng truyn gi tr vo


trong sp.
C php :

CREATE PROCEDURE procedure_name


[@parameter_name data_type]
[=default_value]
[WITH option]
AS
sql_statement [...n]

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 41

A. STORED PROCEDURES
7/ S dng tham s trong sp

Th tc khng tham s
CROC PROC Shopper
As
SELECT cFrirstName, vLastNam, vEmailID
FROM cshopper

Thc thi
EXEC Shopper

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 42

A. STORED PROCEDURES

Th tc c tham s
CROC PROC Shopper_city
@vCity char(15)
As
SELECT cFrirstName, vLastNam, vEmailID
FROM cshopper

Thc thi
EXEC Shopper Woodbridge

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 43

A. STORED PROCEDURES
7/ S dng tham s trong sp
Truyn tham s

Gn gi tr theo th t:

Gn gi tr theo tn bin

EXEC Shopper Woodbridge

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 44

A. STORED PROCEDURES
7/ S dng tham s trong sp
b/Output parameter: Dng tr v gi tr.
C php :
CREATE PROCEDURE procedure_name
[@parameter_name data_type]
[=default_value] OUTPUT
[WITH option]
AS
sql_statement [...n]

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 45

A. STORED PROCEDURES
7/ S dng tham s trong sp
VD :

CREATE PROC count_row


@NumOfOrders int OUTPUT
AS
SELECT @ NumOfOrders = COUNT(*) FROM
Orders
GO
Thc thi sp c tham s output: phi khai bo mt
bin lu gi tr tr v ca tham s output.
DECLARE @num int
EXEC count_row @num OUTPUT
SELECT @num
GO

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 46

A. STORED PROCEDURES
III. Qun l li
SQL Server cung cp mt s cng c qun tr
li:
Lnh RETURN
Th tc sp_addmessage
Lnh RAISERROR
Function @@ERROR:
1.

Lnh RETURN:
c s dng buc sp
kt thc khng iu kin. Lnh RETURN c
th kt thc sp ng thi tr v m tnh
trng (status code ) phc v cho x l khc.

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 47

A.

STORED PROCEDURES
VD:
CREATE PROC ListCustomers
@cus_id nchar(5) = NULL
AS
IF @cus_id IS NULL
BEGIN
PRINT Hay nhap vao ma khach hang hop le!.
PRINT Dinh dang [a-z][a-z][a-z][a-z][a-z]
RETURN
END
SELECT CustomerID, CompanyName, Phone
FROM Customers
WHERE CustomerID = @cus_id
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 48

A.

STORED PROCEDURES

VD2:
USE Northwind
GO
CREATE PROC ListCustomers
@cus_id nvarchar(5) = NULL
AS
SELECT CustomerID, CompanyName, Phone
FROM Customers
WHERE CustomerID like @cus_id
RETURN (@@rowcount)
GO

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 49

A.

STORED PROCEDURES
Thi hnh sp v xem m tnh trng
DECLARE @answer smallint
EXEC @answer = ListCustomers B%
SELECT Tong so khach hang , @answer

2.

S dng th tc sp_addmessage: Bn c th to cc
message thng bo li (error msg) cho chung trnh ca
mnh bng cch

nh ngha trc cc
error msg v lu vo
bng sysmessage

Trong cc sp, gi hin th


cc error msg

sp_addmessage
Nguyn c Cng cuongnguyenduc@gmail.com

RAISERROR
Slide 50

A.

STORED PROCEDURES

C php 1:
sp_addmessage
@msgnum = msg_id ,
@severity = severity ,
@msgtext = 'msg'
[ , [ @lang = ] 'language' ]
[ , [ @with_log = ] 'with_log' ]
[ , [ @replace = ] 'replace' ]

C php 2:
RAISERROR ( msg_id | msg_str , severity ,
state [ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 51

A.

STORED PROCEDURES
VD :
To mt error message bng th tc sp_addmessage
EXEC sp_addmessage
@msgnum = 50001,
@severity = 10,
@msgtext=Khong the xoa. Khach hang co hoa don .,
@withlog = true
GO

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 52

A.

STORED PROCEDURES

VD: Hin th error message trong mt th tc xo khch hng


CREATE PROC DeleteCust
@cust_num nvarchar(5) = null
AS
IF EXISTS (SELECT customerID FROM Orders WHERE
customerID like @cust_num)
BEGIN
RAISERROR (50001, 10, 1)
RETURN
END
DELETE FROM Customers
WHERE customerID like @cust_num
GO
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 53

A. STORED PROCEDURES
3.

S dng @@ERROR
Tr v m li ca lnh sql va thi hnh. @@ERROR s tr
v gi tr 0 nu thnh cng. Ngc li, nu lnh sql thi
hnh khng thnh cng, n s tr v mt gi tr tng
ng vi message li trong bng sysmessages .
a) S dng @@ERROR pht hin li
VD: USE pubs
GO
UPDATE authors SET au_id = '172 32 1176
WHERE au_id = "172-32-1176
IF @@ERROR = 547 print Pht hin li"

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 54

I.

STORED PROCEDURES
4.

Qun tr sp :
Buc SQL Server bin dch li sp mi ln chy
CREATE PROC name
WITH RECOMPILE
AS sql_statement

hay
EXEC procedure_name
WITH RECOMPILE

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 55

A. STORED PROCEDURES

Bi tp 1: Vit th tc Sp_Update_SP c tham s


dng cp nht d liu mi ca mt mu tin no
khi bit Masp trong bng SanPham

Bi tp 2:Vit mt th tc dng ly v tng s


lng lp ho n v n gi trung bnh ca ca
mt sn phm trong mt thng nm no khi
bit m sn phm

Bi tp 3: Vit th tc tr v tng s lng nhp


hoc xut ca 1 sn phm no (dng @flag
phn bit tr v s lng nhp hoc xut).

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 56

Bi tp 1
create proc Sp_Update_SP @ma int,@giamoi money
as
update Products
set UnitPrice=@giamoi
where ProductID=@ma
--thc thi
Sp_Update_SP 2,200

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 57

Bi tp 2
create proc sp_dgAVG @ma int, @thang int,@nam int
as
select count(o.orderid) as "tong so luong lap hoa
don.", avg(UnitPrice) as "don gia trung binh."
from orders o, "Order Details" d
where o.orderid=d.orderid
and month(OrderDate)=@thang
and year(OrderDate)=@nam
and ProductID=@ma
--thc thi:
sp_dgAVG 2,7,1997
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 58

Bi tp 3
create proc sp_TongSL @ma int, @flag bit
as
if @flag=0
select sum(Quantity) as "tong so luong nhap:"
from orders o, "Order Details" d
where o.orderid=d.orderid
and ProductID=@ma
and ShipVia=1 --Lai nhp
else
select sum(Quantity) as "tong so luong nhap:"
from orders o, "Order Details" d
where o.orderid=d.orderid
and ProductID=@ma
and ShipVia=2 Loi Xut

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 59

B.

FUNCTION

1. SYSTEM FUNCTION

Cc hm nh ngha sn: avg(), count(), count(*), sum(),


max(), min(),...

Cc function khc : getdate(), month(), upper(),


user_name(),@@rowcount,...

2. USER-DEFINED FUNCTION

C th s dng bin v cu trc iu khin trong function


ging nh sp.

Function c th dng trong lnh sql, cn sp th khng

C th to cc function tr v 1 gi tr hoc tr v 1 table.

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 60

B.

FUNCTION
SQL Server cho php to 3 loi function :

Scalar: Tr v mt gi tr . Function c th nhn ti 1024


tham s hay khng nhn tham s no.

Multi-statement Table-valued : S dng nhiu cu lnh


tr v mt tp row.

Inline Table-valued :S dng mt cu lnh Select tr v


mt tp row.

Quyn :

Phi c quyn trn lnh CREATE FUNTION to, sa ,


xo function.

Phi c quyn EXECUTE thi hnh function.


Nguyn c Cng cuongnguyenduc@gmail.com

Slide 61

B.

FUNCTION

3. To scalar function :
C php :
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type
[ = default ] } --Tham s truyn vo [ ,...n ] ] )
RETURNS scalar_return_data_type - -Kiu dl ca Gi tr tr v
ca fun.
[ WITH < function_option> [ [,] ...n] ] [ AS ]
BEGIN
function_body
RETURN scalar_expression
END
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 62

B.

FUNCTION
VD :--To function
CREATE FUNCTION dbo.OrderNum
( @monthOrd tinyint )
RETURNS tinyint
AS
BEGIN
DECLARE @Ordnum tinyint
SELECT @Ordnum = count(orderid)
FROM Orders
WHERE month(orderdate)= @monthOrd
RETURN @Ordnum
END
GO
--Thi hnh function .Ch : phi dng tn y
SELECT dbo.OrderNum(7)
Nguyn c Cng cuongnguyenduc@gmail.com
Slide 63

B. FUNCTION

C th dng function trong mnh Where


Select orderid
from orders
where dbo.OrderNum(7) > 50
and month(orderdate)=7

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 64

B. FUNCTION

Tr v hm v hng nh ngha

CREATE FUNCTION Ham_Soluong_Phong (


@BienMaPhong CHAR (3) )
RETURNS int
AS
BEGIN
DECLARE @SL int;
SELECT @SL = COUNT (*)
FROM NhanVien
WHERE MaPhong=@BienMaPhong ;
RETURN (@SL);
END
Nguyn c Cng cuongnguyenduc@gmail.com

Slide 65

B. FUNCTION

Tr v hm v hng S dng

SELECT dbo.Ham_Soluong_Phong('KDA');
SELECT MaPhong, count (*)
FROM NhanVien
GROUP BY MaPhong
HAVING count(*) >
dbo.Ham_Soluong_Phong('QTA')

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 66

B. FUNCTION

Ham cho ket qua la mot bang


CREATE FUNCTION Ham_DS_Phong
(@BienMaPhong CHAR (3))
RETURNS @kq TABLE (Manv CHAR(5), HoTen
NCHAR(40), NgaySinh DATETIME)
BEGIN
INSERT INTO @kq
SELECT Manv, HoTen, NgaySinh
FROM NhanVien
WHERE MaPhong=@BienMaPhong
RETURN
END

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 67

B. FUNCTION

Ham cho ket qua la mot bang

-- Su dung ham tra ket qua bang nhu la TABLE


SELECT *
FROM Ham_DS_Phong ('QTA')

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 68

B. FUNCTION
V d: Ly ra cc khch hng c m khch hng ty
create function f_SelectCustomer
(@customerid int)
returns table
as
return (select * from customers
where customerid > @customerid)

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 69

B. FUNCTION
-- Su dung ham tra ket qua bang nhu la TABLE
SELECT *
FROM Ham_DS_Phong ('QTA')

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 70

[Categories] [CategoryID]
,[Description] ,[Picture]

,[CategoryName]

[Orders] ([OrderID],[CustomerID] ,[EmployeeID]


,[OrderDate]
,[RequiredDate] ,[ShippedDate]
,[ShipVia]
,[Freight] ,[ShipName] ,[ShipAddress]
,[ShipCity]
,[ShipRegion]
,[ShipPostalCode]
,[ShipCountry

[Products][ProductID],[ProductName] ,[SupplierID]
,[CategoryID] ,[QuantityPerUnit] ,[UnitPrice]
,[UnitsInStock]
,[UnitsOnOrder]
,[ReorderLevel]

,[Discontinued]

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 71

Bi tp

1/ Vit hm tnh tui trung bnh ca nhn vin


thuc 1 thnh ph.

2/ Vit th tc hin th danh mc chi tit cc ha


n (M ha n, ngy lp, tng tin) c lp bi
1 nhn vin n t 1 thnh ph no .

3/ Vit th tc thm vo 1 ha n (OrderId,


Orderdate, CustomerID, EmpID) v chi tit ha n
(OrderId, productId, Price, quanlity)

Nguyn c Cng cuongnguyenduc@gmail.com

Slide 72

You might also like