Professional Documents
Culture Documents
Lecturer:
Email:
Website:
Ni dung
Tng quan
Bin
Cu trc iu khin
Th tc (store procedures)
Hm(function)
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.
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 []
Slide 3
TNG QUAN
Slide 4
BIN (Variable)
Bin: c 2 loi bin: bin cc b v bin ton cc
1. Bin cc b (Local variable):
Tn bt u bng k t @
Khai bo bin:
DECLARE @ VariableName var_type
V d: DECLARE @vEmpID int
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
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.
@@VERSION:
V d: Select @@ version
Slide 8
BIN (Variable)
@@SERVERNAME: tn sever
V d: select @@SERVERNAME
Slide 9
BIN (Variable)
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
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
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]
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
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
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 ] ]
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
Slide 21
Bi tp
Gii
declare @maso int
set @maso=7
select * from products where productid<=@maso
Slide 22
Bi tp
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'
Slide 24
Bi tp
1 Hoc vien 1
CDTH3
2 Hoc vien 2
CDTH3
10.
..
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
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
Slide 28
LP TRNH T-SQL
TH TC V HM
(STORED PROCEDURES AND FUNCTION)
Slide 29
Gii thiu
An ninh bo mt hn
Slide 30
A. STORE PROCEDURE
C IM:
1.
Truyn tham s.
Gi th tc khc.
Slide 31
A. STORE PROCEDURE
2/CC LOI SP:
Slide 32
A. STORE PROCEDURE
2/CC LOI SP:
User_defined : c th l local, temporary, remote
Slide 33
A. STORE PROCEDURE
3/To stored Procedures
To bng wizard
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
Slide 35
A. STORE PROCEDURE
Xem ni dung th tc :
sp_helptext Procedure_name
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
Slide 37
A.
STORED PROCEDURES
Slide 38
A.
STORED PROCEDURES
5/ Sa i ni dung sp:
C php
ALTER PROCEDURE procedure_name
[WITH option]
AS
sql_statement [...n]
GO
Slide 39
A. STORED PROCEDURES
6/ Xo sp
DROP PROC
owner.stored_procedure_name
V d:
DROP Proc
OrderSummary
Slide 40
A. STORED PROCEDURES
7/ S dng tham s trong sp
a)
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
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
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
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]
Slide 45
A. STORED PROCEDURES
7/ S dng tham s trong sp
VD :
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.
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
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
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
Slide 52
A.
STORED PROCEDURES
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"
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
Slide 55
A. STORED PROCEDURES
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
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
Slide 59
B.
FUNCTION
1. SYSTEM FUNCTION
2. USER-DEFINED FUNCTION
Slide 60
B.
FUNCTION
SQL Server cho php to 3 loi function :
Quyn :
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
Slide 64
B. FUNCTION
Tr v hm v hng nh ngha
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')
Slide 66
B. FUNCTION
Slide 67
B. FUNCTION
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)
Slide 69
B. FUNCTION
-- Su dung ham tra ket qua bang nhu la TABLE
SELECT *
FROM Ham_DS_Phong ('QTA')
Slide 70
[Categories] [CategoryID]
,[Description] ,[Picture]
,[CategoryName]
[Products][ProductID],[ProductName] ,[SupplierID]
,[CategoryID] ,[QuantityPerUnit] ,[UnitPrice]
,[UnitsInStock]
,[UnitsOnOrder]
,[ReorderLevel]
,[Discontinued]
Slide 71
Bi tp
Slide 72