Lệnh WAITFOR: Lệnh WAITFOR: Là một chỉ thị cho SQL Server tạm Là một chỉ thị cho SQL Server tạm dừng một thời gian trước khi xử lý tiếp các phát biểu. dừng một thời gian trước khi xử[r]
(1)CƠ BẢN VỀ LẬP TRÌNH BẰNG TRANSACT – SQL
CƠ BẢN VỀ LẬP TRÌNH BẰNG TRANSACT – SQL
10
(2)2
1 Khái niệm bản: 1 Khái niệm bản: a Qui tắc định danh: a Qui tắc định danh: Tối đa 128 ký tự.Tối đa 128 ký tự.
Bắt đầu ký tự thông thường A->ZBắt đầu ký tự thông thường A->Z
Bắt đầu ký hiệu (@,#) có ý nghĩa Bắt đầu ký hiệu (@,#) có ý nghĩa
khác.
khác.
Những định danh có khoảng trắng Những định danh có khoảng trắng
phải kẹp dấu [] oặc “ ”
phải kẹp dấu [] oặc “ ”
Các định danh không trùng lắp không Các định danh không trùng lắp khơng
trùng với từ khóa T-SQL.
(3)b Tham chiếu đến đối tượng: b Tham chiếu đến đối tượng:
Tên đầy đủ:Tên đầy đủ: Server.database.ower.objectServer.database.ower.object
Tên ngắn: Nếu local server ta khỏi Tên ngắn: Nếu local server ta khỏi
Server, CSDL hành khơng cần
Server, CSDL hành không cần
Database;
Database; OwnerOwner mặc định user name mặc định user name Database.
Database.
Nếu tham chiếu tường minh tăng tốc.Nếu tham chiếu tường minh tăng tốc.
Ví dụ:
Ví dụ: Create TableCreate Table Northwind orederhistNorthwind orederhist Create Table
Create Table Northwind.dbo.orederhistNorthwind.dbo.orederhist Database Owner (dbo) user có đầy đủ quyền Database Owner (dbo) user có đầy đủ quyền
thao tác CSDL Bất kỳ thành viên
thao tác CSDL Bất kỳ thành viên
thuộc nhóm sysadmin thuộc dbo.
(4)4
c Kiểu liệu (data type):
c Kiểu liệu (data type): xem lại – Tr.43 xem lại – Tr.43
d Batch:
d Batch: tập phát biểu T-SQL nằm liên tập phát biểu T-SQL nằm liên tiếp kết thúc phát biểu GO
tiếp kết thúc phát biểu GO
Vd:
Vd:
USE
USE giaotrinh_dbgiaotrinh_db GO
GO
Create View
Create View vw_NhanVien vw_NhanVien
AS
AS
Select
Select * From * From NhanVien NhanVien GO
GO Select
Select * From * From vw_NhanVien vw_NhanVien GO
(5) Ghi chú:Ghi chú:
Các phát biểu batch biên dịch Các phát biểu batch biên dịch
thành nhóm.
thành nhóm.
Nếu phát biểu batch bị lỗi Nếu phát biểu batch bị lỗi
batch xem lỗi.
batch xem lỗi.
Các phát biểu CreateCác phát biểu Create bị ràng buộc bị ràng buộc batch
batch đơn, tức batch có phát biểu đơn, tức batch có phát biểu Create Các phát biểu là: Create DataBase,
Create Các phát biểu là: Create DataBase,
Create Table, Create Index,…
Create Table, Create Index,… e.
e Kịch (Script)Kịch (Script)
Một Script tập hay nhiều bó lệnh Một Script tập hay nhiều bó lệnh
được lưu lại thành tập tin SQL
(6)6
2 Biến (Variable) 2 Biến (Variable)
Biến dùng để:Biến dùng để:
Phải khai báo trước dùng.Phải khai báo trước dùng.
Các loại biến: biến cục (local) biến toàn Các loại biến: biến cục (local) biến toàn
cục (Global: SQL Server đưa
cục (Global: SQL Server đưa
dùng không cần khai báo
dùng không cần khai báo Biến cục (Local variable)Biến cục (Local variable)
Được khai báo phần thân bó lệnh Được khai báo phần thân bó lệnh
hoặc thủ tục.
hoặc thủ tục.
Phạm vi hoạt động biến điểm mà Phạm vi hoạt động biến điểm mà
nó khai báo kết thúc lơ
nó khai báo kết thúc lô (batch)
(batch) stored procedure stored procedure Functionhoặc Function mà mà nó khai báo.
nó khai báo.
(7)a Khai báo (Declare): a Khai báo (Declare):
DECLARE
DECLARE @var_name @var_name var_type [,…n] var_type [,…n] Gán giá trị cho biến:Gán giá trị cho biến:
Nếu biến vừa khai báo xong biến Nếu biến vừa khai báo xong biến
được gán giá trị NULL.
được gán giá trị NULL.
Để gán biến ta dùng lệnh SetĐể gán biến ta dùng lệnh Set dùng câu lệnh dùng câu lệnh Select
Select Syntax:Syntax:
SET
SET @var_name = @var_name = expressionexpression
SELECT
(8)8
Use
Use giaotrinh_dbgiaotrinh_db GO
GO
Declare
Declare @NamLV int @NamLV int
Set
Set @NamLV = 1994 @NamLV = 1994
Select
Select * From * From NhanVien NhanVien
Where
Where YearYear(NgayLamViec) = @NamLV (NgayLamViec) = @NamLV GO
GO Use
Use giaotrinh_dbgiaotrinh_db GO
GO
Declare
Declare @TenDem nvarchar @TenDem nvarchar(10),(10), @HoTen nvarchar @HoTen nvarchar(50) (50) Set @TenDem = N
Set @TenDem = N''VanVan''
Select
Select @HoTen = Ho + @HoTen = Ho + '' '' + Ten From + Ten From NhanVien NhanVien
Where
Where Ho Like Ho Like '%' + '%' + @TenDem@TenDem + '%' + '%'
Select
Select @ @HoTen HoTen GO
(9)3 Cấu trúc điều khiển:
3 Cấu trúc điều khiển:
a
a Khối Khối BEGIN … END BEGIN … END b PRINT:
b PRINT: Dùng để in thơng tin hình kết Dùng để in thơng tin hình kết của SQL Biểu thức, chuỗi, hàm, biến….
của SQL Biểu thức, chuỗi, hàm, biến….
VD:
VD: PRINTPRINT N ‘Chào bạn’ N ‘Chào bạn’
PRINTPRINT @@VERSION @@VERSION
PRINTPRINT N‘Hai nhân năm = ‘ + N‘Hai nhân năm = ‘ + CastCast(2*5 as char(4))(2*5 as char(4))
c Cấu trúc điều khiển:
c Cấu trúc điều khiển: IF … ELSE IF … ELSE Syntax:
Syntax:
IF
IF conditioncondition
{statement}
{statement} [ ELSE
(10)10
USE
USE GiaoTrinh_db GiaoTrinh_db
IF
IF ( ( Select Select CountCount (*) (*) FromFrom KhachHang KhachHang
Where
Where TenCongTy = ‘ABC’ TenCongTy = ‘ABC’ ) ) > >
Begin
Begin
Print ‘Có Cơng ty tên ABC’ ‘Có Cơng ty tên ABC’
End
End
ELSE
ELSE
Begin
Begin
Print ‘Khơng Có Cơng ty tên ABC’ ‘Khơng Có Cơng ty tên ABC’
End
(11)d Cấu trúc CASE
d Cấu trúc CASE
CASE
CASE input_expression input_expression
WHENWHEN when_expression when_expression THENTHEN result_expression result_expression
[ n ] [ n ]
[ [ ELSEELSE else_result_expression ] else_result_expression ]
END
END
-CASE CASE
WHENWHEN when_expression when_expression THENTHEN result_expression result_expression
[ n ] [ n ]
(12)12 SELECT
SELECT MaNhanVien, Ho, Ten, LuongCoBan + MaNhanVien, Ho, Ten, LuongCoBan +
CASE
CASE
WHEN
WHEN PhuCap PhuCap IS NULLIS NULL THENTHEN 0
ELSE
ELSE PhuCap PhuCap
END
END
FROM
FROM NHANVIEN NHANVIEN
-Select
Select N'Nhóm giá loại hàng' = N'Nhóm giá loại hàng' =
CASECASE
WhenWhen price price IS NULLIS NULL THENTHEN N'Chưa có gía' N'Chưa có gía'
WhenWhen price < 10 price < 10 THENTHEN N'Giá < 10' N'Giá < 10'
WhenWhen price >= 10 price >= 10 andand price < 20 price < 20 ThenThen N'Giá >= 10 <=20' N'Giá >= 10 <=20'
ElseElse N'Giá > 20' N'Giá > 20'
ENDEND,,
Title Title asas N'Tựa đề' N'Tựa đề'
FROM
FROM titles titles
ORDER BY
(13)DECLARE
DECLARE @a as @a as intint, @b as , @b as intint DECLARE
DECLARE @ketqua as @ketqua as nvarcharnvarchar(30)(30)
SET
SET @a=3 @a=3
SET
SET @b=5 @b=5
SET
SET @ketqua = @ketqua = CASECASE
WHENWHEN @a<@b @a<@b THENTHEN N'A nhỏ B' N'A nhỏ B'
WHENWHEN @a<@b THEN N'A lớn B' @a<@b THEN N'A lớn B'
ELSEELSE N'A B' N'A B'
ENDEND - End cua CASE - End cua CASE
14
e Vòng lặp WHILE
e Vòng lặp WHILE
WHILE
WHILE Boolean_expression Boolean_expression
{sql_statement | statement_block}{sql_statement | statement_block}
[ BREAK ]
[ BREAK ]
{sql_statement | statement_block}{sql_statement | statement_block}
[ CONTINUE ]
[ CONTINUE ]
[BREAK]:[BREAK]: Dùng để kết thúc vòng lặp gặp Dùng để kết thúc vòng lặp gặp
trường hợp cụ thể đó. trường hợp cụ thể đó.
[CONTINUE]:[CONTINUE]: Lặp lại đầu vịng lặp. Lặp lại đầu vịng lặp.
Thơng thường từ khóa Thơng thường từ khóa BreakBreak ContinueContinue nằm nằm
trong cấu trúc
(15)e Vòng lặp WHILE
e Vòng lặp WHILE
USE
USE pubs pubs GO
GO
WHILE
WHILE (SELECT (SELECT AVGAVG(price) FROM(price) FROM titles) < $30 titles) < $30
BEGIN
BEGIN
UPDATEUPDATE titles titles
SETSET price = price * price = price * 2
SELECTSELECT MAX(price) FROM titles MAX(price) FROM titles
IFIF (SELECT (SELECT MAXMAX(price) FROM(price) FROM titles) > $50 titles) > $50
BREAKBREAK
ELSEELSE
CONTINUECONTINUE
END
(16)16
e Lệnh RETURN:
e Lệnh RETURN: RETURNRETURN [integer_expression] [integer_expression]
Return
Return kết thúc tiến trình trình xử lý, Returnkết thúc tiến trình trình xử lý, Return thường thường được dùng thủ tục lưu trữ
được dùng thủ tục lưu trữ (Store Procedure).(Store Procedure).
f
f Lệnh WAITFOR: Lệnh WAITFOR: Là thị cho SQL Server tạm Là thị cho SQL Server tạm dừng thời gian trước xử lý tiếp phát biểu
dừng thời gian trước xử lý tiếp phát biểu
sau đó.
sau đó. Syntax:
Syntax: WAITFOR WAITFOR { DELAY{ DELAY ‘time’ | TIME ‘time’ | TIME ‘time’ } ‘time’ } ‘
‘time’: Được viết theo dạng hh:mm:ss, tối đa 24 giờtime’: Được viết theo dạng hh:mm:ss, tối đa 24 giờ
DELAY ‘Time’:
DELAY ‘Time’: Hệ thống tạm dừng Hệ thống tạm dừng khoảng thời khoảng thời gian ‘Time’ VD:
gian ‘Time’ VD: WAITFOR DELAY WAITFOR DELAY ’02:10’’02:10’
TIME ‘Time’:
TIME ‘Time’: Hệ thống tạm dừng đến Hệ thống tạm dừng đến thời gian thời gian ‘Time’ VD:
(17)g Lệnh RAIREEOR g Lệnh RAIREEOR
Phát sinh lỗi người dùng Người dùng phát sinh
Phát sinh lỗi người dùng Người dùng phát sinh
các lỗi từ bảng
các lỗi từ bảng sysmessagesysmessage xây dựng lỗi động tùy xây dựng lỗi động tùy thông tin người dùng
thông tin người dùng RAISERROR
RAISERROR ({msg_id | msg_str} {, severity, state}({msg_id | msg_str} {, severity, state} [,argument [,…n]])
[,argument [,…n]])
[WITH option [,…n]]
[WITH option [,…n]]
Thêm lỗi người dùng định nghĩa:
Thêm lỗi người dùng định nghĩa:
Sp_addMessage
Sp_addMessage msg_ID, severity, ‘msg’ [,’language’]msg_ID, severity, ‘msg’ [,’language’] [,’with_log’] [,’replace’]
[,’with_log’] [,’replace’]
Xóa lỗi người dùng
Xóa lỗi người dùng
(18)18
Msg_id:Msg_id: Là mã số lỗi mới, số int, không Là mã số lỗi mới, số int, khơng trùng mã có sẵn, bắt đầu
trùng mã có sẵn, bắt đầu 5000150001
Severity:Severity: Là mức lỗi lỗi, số smallint Là mức lỗi lỗi, số smallint Mức hợp lệ Mức hợp lệ là từ đến 25 Chỉ có người quản trị CSDL phát
là từ đến 25 Chỉ có người quản trị CSDL phát
sinh thêm thông báo lỗi từ 19 đến 25.
sinh thêm thông báo lỗi từ 19 đến 25.
‘‘msg’:msg’: Là chuỗi thông báo lỗi, tối đa 255 ký tự. Là chuỗi thông báo lỗi, tối đa 255 ký tự. ‘‘Language’:Language’: mặc định ngôn ngữ phiên kết nối. mặc định ngôn ngữ phiên kết nối.
‘‘with_log’:with_log’: Thông báo lỗi có ghi nhận vào nhật ký Thơng báo lỗi có ghi nhận vào nhật ký của ứng dụng xảy hay khơng, mặc định
của ứng dụng xảy hay không, mặc định FALSEFALSE ‘‘replace’:replace’: Nếu định chuỗi REPLACE Nếu định chuỗi REPLACE, thơng , thơng báo lỗi tồn ghi đè chuỗi thông báo
báo lỗi tồn ghi đè chuỗi thông báo
mức lỗi Tham số phải định