SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
Bài 4:
STORED PROCEDURE & GIAO DỊCH
Các nội dung đã học trong bài trước
Làm việc với các kiểu dữ liệu
Mã kịch bản
Hệ thống bài cũ
Stored Procedure & Giao dịch 2
Mục tiêu
1. Stored Procedure
Stored Procedure & Giao dịch 3
2. Giao dịch
Stored Procedure & Giao dịch 4
Các tùy chọn
lập trình thủ tục trong Transact-SQL
Kiểu Nhóm câu
Lệnh (Batch)
Lưu trữ Thực thi Tham số
Mã kịch bản
(Script)
Gồm nhiều nhóm
câu lệnh
Trong file trên ổ đĩa Từ công cụ client
như Management
Studio hoặc
SQLCMD
Không
Stored
Procedure
Duy nhất Trong đối tượng của CSDL Bởi ứng dụng hoặc
trong mã kịch bản
SQL
Có
Stored Procedure & Giao dịch 5
Stored
Procedure
Duy nhất Trong đối tượng của CSDL Bởi ứng dụng hoặc
trong mã kịch bản
SQL
Có
Hàm người
dùng định
nghĩa
Duy nhất Trong đối tượng của CSDL Bởi ứng dụng hoặc
trong mã kịch bản
SQL
Có
Trigger Duy nhất Trong đối tượng của CSDL Tự động bởi server
khi một truy vấn
hành động cụ thể
xảy ra
Không
Stored Procedure là một tập các câu lệnh T-SQL thực
hiện một nhiệm vụ cụ thể, được đặt tên và lưu trữ
trong CSDL dưới dạng đã biên dịch.
Stored procedure cung cấp một phương pháp hữu ích
cho việc thực thi lặp lại cùng một nhiệm vụ
Giúp tái sử dụng code
Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored
Procedure thay vì viết và thực thi lại cùng một tập hợp các
câu lệnh.
Cách sử dụng các biến, cấu trúc điều khiển trong
Stored Procedure tương tự như mã kịch bản
Stored Procedured
Stored Procedure là một tập các câu lệnh T-SQL thực
hiện một nhiệm vụ cụ thể, được đặt tên và lưu trữ
trong CSDL dưới dạng đã biên dịch.
Stored procedure cung cấp một phương pháp hữu ích
cho việc thực thi lặp lại cùng một nhiệm vụ
Giúp tái sử dụng code
Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored
Procedure thay vì viết và thực thi lại cùng một tập hợp các
câu lệnh.
Cách sử dụng các biến, cấu trúc điều khiển trong
Stored Procedure tương tự như mã kịch bản
Stored Procedure & Giao dịch 6
Ví dụ về Stored Procedured
USE AP
IF OBJECT_ID('spCopyInvoices') IS NOT NULL
DROP PROC spCopyInvoices
GO
CREATE PROC spCopyInvoices
AS
IF OBJECT_ID('InvoiceCopy') IS NOT NULL
DROP TABLE InvoiceCopy
SELECT * INTO InvoiceCopy FROM Invoices
Đoạn mã kịch bản tạo Stored Procedure spCopyInvoices,
thực hiện copy dữ liệu từ bảng Invoices sang bảng
Invoice Copy
Stored Procedure & Giao dịch 7
USE AP
IF OBJECT_ID('spCopyInvoices') IS NOT NULL
DROP PROC spCopyInvoices
GO
CREATE PROC spCopyInvoices
AS
IF OBJECT_ID('InvoiceCopy') IS NOT NULL
DROP TABLE InvoiceCopy
SELECT * INTO InvoiceCopy FROM Invoices
Mỗi lần thực hiện copy dữ liệu, chỉ cần thực hiện lời gọi SP
EXEC spCopyInvoices
Cú pháp:
CREATE {PROC|PROCEDURE} <tên thủ tục>
[<Danh sách tham số>]
[WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXCECUTE AS>]]
AS <Các câu lệnh SQL>
Chú ý:
Tên thủ tục
Chứa tối đa 128 kí tự
Nên đặt tên với tiền tố sp
Câu lệnh CREATE PROC phải là câu lệnh đầu tiên của một
nhóm câu lệnh
Cú pháp
Cú pháp:
CREATE {PROC|PROCEDURE} <tên thủ tục>
[<Danh sách tham số>]
[WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXCECUTE AS>]]
AS <Các câu lệnh SQL>
Chú ý:
Tên thủ tục
Chứa tối đa 128 kí tự
Nên đặt tên với tiền tố sp
Câu lệnh CREATE PROC phải là câu lệnh đầu tiên của một
nhóm câu lệnh
Stored Procedure & Giao dịch 8
Hai loại tham số:
Tham số đầu vào
Tham số bắt buộc
– Bắt buộc phải truyền giá trị cho tham số này
Tham số tùy chọn:
– Đã được gán giá trị mặc định.
– Nếu không truyền giá trị trong lời gọi thủ tục. Tham số
sẽ nhận giá trị mặc định.
Tham số đầu ra
Sử dụng đề lấy kết quả trả về từ thủ tục
Khai báo bằng từ khóa OUTPUT
Cú pháp <danh sách tham số>
@<tham số 1> <kiểu dữ liệu> [= <mặc định>] [OUTPUT|OUT]
[, @<tham số 2> <kiểu dữ liệu> [= <mặc định>] [OUTPUT|OUT]]...
Khai báo và làm việc với tham số
Hai loại tham số:
Tham số đầu vào
Tham số bắt buộc
– Bắt buộc phải truyền giá trị cho tham số này
Tham số tùy chọn:
– Đã được gán giá trị mặc định.
– Nếu không truyền giá trị trong lời gọi thủ tục. Tham số
sẽ nhận giá trị mặc định.
Tham số đầu ra
Sử dụng đề lấy kết quả trả về từ thủ tục
Khai báo bằng từ khóa OUTPUT
Cú pháp <danh sách tham số>
@<tham số 1> <kiểu dữ liệu> [= <mặc định>] [OUTPUT|OUT]
[, @<tham số 2> <kiểu dữ liệu> [= <mặc định>] [OUTPUT|OUT]]...
Stored Procedure & Giao dịch 9
Stored Procedure sử dụng một tham số đầu ra và hai
tham số đầu vào
Demo
Sử dụng tham số đầu vào/đầu ra
CREATE PROC spInvTotal3
@InvTotal money OUTPUT,
@DateVar smalldatetime ,
@VendorVar varchar(40) = '%'
AS
-- Nếu @Date Var không được truyền giá trị
-- Gán giá trị cho @DateVar bằng ngày hóa đơn nhỏ nhất
IF @DateVar IS NULL
SELECT @DateVar = MIN(InvoiceDate) FROM Invoices
-- Truy xuất tổng số tiền của các hóa đơn có ngày hóa đơn lớn hơn @DateVar
-- của nhà cung cấp có VendorName được lọc theo giá trị biến @VendorVar
SELECT @InvTotal = SUM(InvoiceTotal)
FROM Invoices JOIN Vendors
ON Invoices.VendorID = Vendors.VendorID
WHERE (InvoiceDate >= @DateVar) AND
(VendorName LIKE @VendorVar)
Tham số đầu ra
Tham số đầu vào bắt buộc
Tham số đầu vào tùy chọn
Stored Procedure & Giao dịch 10
CREATE PROC spInvTotal3
@InvTotal money OUTPUT,
@DateVar smalldatetime ,
@VendorVar varchar(40) = '%'
AS
-- Nếu @Date Var không được truyền giá trị
-- Gán giá trị cho @DateVar bằng ngày hóa đơn nhỏ nhất
IF @DateVar IS NULL
SELECT @DateVar = MIN(InvoiceDate) FROM Invoices
-- Truy xuất tổng số tiền của các hóa đơn có ngày hóa đơn lớn hơn @DateVar
-- của nhà cung cấp có VendorName được lọc theo giá trị biến @VendorVar
SELECT @InvTotal = SUM(InvoiceTotal)
FROM Invoices JOIN Vendors
ON Invoices.VendorID = Vendors.VendorID
WHERE (InvoiceDate >= @DateVar) AND
(VendorName LIKE @VendorVar)
Hai cách truyền giá trị cho tham số
Truyền theo tên
Truyền theo vị trí
Lời gọi thủ tục truyền tham số theo vị trí
Demo
Lời gọi thủ tục
DECLARE @MyInvTotal money
EXEC spInvTotal3 @MyInvTotal OUTPUT, '2008-06-01', 'P%'
SELECT @MyInvTotal
Hai cách truyền giá trị cho tham số
Truyền theo tên
Truyền theo vị trí
Lời gọi thủ tục truyền tham số theo vị trí
Stored Procedure & Giao dịch 11
DECLARE @MyInvTotal money
EXEC spInvTotal3 @MyInvTotal OUTPUT, '2008-06-01', 'P%'
SELECT @MyInvTotal
Lời gọi thủ tục truyền tham số theo tên
Lời gọi thủ tục không truyền giá trị cho tham số tùy chọn
Demo
Lời gọi thủ tục
DECLARE @MyInvTotal money
EXEC spInvTotal3 @DateVar = '2008-06-01', @VendorVar = 'P%',
@InvTotal = @MyInvTotal OUTPUT
Lời gọi thủ tục truyền tham số theo tên
Lời gọi thủ tục không truyền giá trị cho tham số tùy chọn
Stored Procedure & Giao dịch 12
DECLARE @MyInvTotal money
EXEC spInvTotal3 @DateVar = '2008-06-01', @InvTotal = @MyInvTotal OUTPUT
Giá trị trả về của thủ tục
Sử dụng tham số OUTPUT để trả về giá trị có kiểu dữ liệu
bất kì
Sử dụng hàm RETURN để trả về giá trị số nguyên
Cú pháp câu lệnh RETURN
RETURN <biểu thức số nguyên>
Làm việc với giá trị trả về
Giá trị trả về của thủ tục
Sử dụng tham số OUTPUT để trả về giá trị có kiểu dữ liệu
bất kì
Sử dụng hàm RETURN để trả về giá trị số nguyên
Cú pháp câu lệnh RETURN
RETURN <biểu thức số nguyên>
Stored Procedure & Giao dịch 13
Stored Procedure chứa câu lệnh RETURN
Trả về số lượng hóa đơn của nhà cung cấp có
VendorName thỏa mãn điều kiến lọc @VendorVar và có
ngày hóa đơn lớn hơn giá trị của biến @DateVar
Demo
Làm việc với giá trị trả về
CREATE PROC spInvCount
@DateVar smalldatetime = NULL,
@VendorVar varchar(40) = '%'
AS
IF @DateVar IS NULL
SELECT @DateVar = MIN(InvoiceDate) FROM Invoices
DECLARE @InvCount int
SELECT @InvCount = COUNT(InvoiceID)
FROM Invoices JOIN Vendors
ON Invoices.VendorID = Vendors.VendorID
WHERE ((InvoiceDate >= @DateVar) AND
(VendorName LIKE @VendorVar))
RETURN @InvCount
Stored Procedure & Giao dịch 14
CREATE PROC spInvCount
@DateVar smalldatetime = NULL,
@VendorVar varchar(40) = '%'
AS
IF @DateVar IS NULL
SELECT @DateVar = MIN(InvoiceDate) FROM Invoices
DECLARE @InvCount int
SELECT @InvCount = COUNT(InvoiceID)
FROM Invoices JOIN Vendors
ON Invoices.VendorID = Vendors.VendorID
WHERE ((InvoiceDate >= @DateVar) AND
(VendorName LIKE @VendorVar))
RETURN @InvCount
Demo
Làm việc với giá trị trả về
DECLARE @InvCount int
EXEC @InvCount = spInvCount '2008-06-01', 'P%'
PRINT 'Invoice count: ' + CONVERT(varchar, @InvCount)
Lời gọi Stored Procedure
Stored Procedure & Giao dịch 15
Xử lý lỗi
Câu lệnh TRY … CATCH
Ngăn chặn lỗi
Kiểm tra tính hợp lệ của dữ liệu.
Nếu dữ liệu không hợp lệ, sử dụng câu lệnh RAISERROR
để sinh lỗi.
Kiểm tra tính hợp lệ
của dữ liệu và tạo thông báo lỗi
Xử lý lỗi
Câu lệnh TRY … CATCH
Ngăn chặn lỗi
Kiểm tra tính hợp lệ của dữ liệu.
Nếu dữ liệu không hợp lệ, sử dụng câu lệnh RAISERROR
để sinh lỗi.
Stored Procedure & Giao dịch 16
Cú pháp
RAISERROR ({<ID của thông báo lỗi>|<chuỗi thông báo>}, <độ nghiêm
trọng>, <trạng thái>)
Chú ý:
Câu lệnh RAISERROR được truyền tham số <ID của
thông báo lỗi> sẽ tạo một lỗi hệ thống
Câu lệnh RAISERROR được truyền tham số <chuỗi thông
báo> sẽ tạo một thông báo lỗi chính là tham số được
truyền vào.
Tham số <Độ nghiêm trọng> chỉ ra mức độ nghiêm
trọng của lỗi.
Giá trị từ 11 -> 19. Lỗi được tạo ra sẽ được xử lý trong khối
CATCH
Giá trị từ 20 -> 25. Kết nối từ client tới CSDL sẽ bị ngắt đột
ngột
Kiểm tra tính hợp lệ
của dữ liệu và tạo thông báo lỗi
Cú pháp
RAISERROR ({<ID của thông báo lỗi>|<chuỗi thông báo>}, <độ nghiêm
trọng>, <trạng thái>)
Chú ý:
Câu lệnh RAISERROR được truyền tham số <ID của
thông báo lỗi> sẽ tạo một lỗi hệ thống
Câu lệnh RAISERROR được truyền tham số <chuỗi thông
báo> sẽ tạo một thông báo lỗi chính là tham số được
truyền vào.
Tham số <Độ nghiêm trọng> chỉ ra mức độ nghiêm
trọng của lỗi.
Giá trị từ 11 -> 19. Lỗi được tạo ra sẽ được xử lý trong khối
CATCH
Giá trị từ 20 -> 25. Kết nối từ client tới CSDL sẽ bị ngắt đột
ngột
Stored Procedure & Giao dịch 17
Stored procedure kiểm tra khóa ngoại hợp lệ
Chỉ thực hiện câu lệnh chèn dữ liệu vào bảng Invoices
khi tham số đầu vào VendorID hợp lệ (đã tồn tại trong
bảng Vendors)
Demo kiểm tra tính hợp lệ
của dữ liệu và tạo thông báo lỗi
CREATE PROC spInsertInvoice
@VendorID int, @InvoiceNumber varchar(50),
@InvoiceDate smalldatetime, @InvoiceTotal money,
@TermsID int, @InvoiceDueDate smalldatetime
AS
IF EXISTS (SELECT * FROM Vendors WHERE VendorID = @VendorID)
BEGIN
INSERT Invoices
VALUES (@VendorID,@InvoiceNumber,
@InvoiceDate,@InvoiceTotal,0,0,
@TermsID,@InvoiceDueDate,NULL, NULL)
END
ELSE
BEGIN
RAISERROR('Not a valid VendorID!', 11, 1)
END
Stored Procedure & Giao dịch 18
CREATE PROC spInsertInvoice
@VendorID int, @InvoiceNumber varchar(50),
@InvoiceDate smalldatetime, @InvoiceTotal money,
@TermsID int, @InvoiceDueDate smalldatetime
AS
IF EXISTS (SELECT * FROM Vendors WHERE VendorID = @VendorID)
BEGIN
INSERT Invoices
VALUES (@VendorID,@InvoiceNumber,
@InvoiceDate,@InvoiceTotal,0,0,
@TermsID,@InvoiceDueDate,NULL, NULL)
END
ELSE
BEGIN
RAISERROR('Not a valid VendorID!', 11, 1)
END
Mã kịch bản gọi Stored Procedure
Demo kiểm tra tính hợp lệ
của dữ liệu và tạo thông báo lỗi
BEGIN TRY
EXEC spInsertInvoice
799,'ZXK-799', '2008-07-01', 299.95,1, '2008-08-01'
END TRY
BEGIN CATCH
PRINT 'An error occurred.'
PRINT 'Message: ' + CONVERT(varchar, ERROR_MESSAGE())
IF ERROR_NUMBER() = 50000
PRINT 'This is a custom error message.'
END CATCH
Stored Procedure & Giao dịch 19
BEGIN TRY
EXEC spInsertInvoice
799,'ZXK-799', '2008-07-01', 299.95,1, '2008-08-01'
END TRY
BEGIN CATCH
PRINT 'An error occurred.'
PRINT 'Message: ' + CONVERT(varchar, ERROR_MESSAGE())
IF ERROR_NUMBER() = 50000
PRINT 'This is a custom error message.'
END CATCH
Sử dụng hàm SP_helptext
Sp_helptext ‘Tên Stored Procedure’
Chú ý: Người dùng không thể xem nội dung của một Sp
được định nghĩa sử dụng tùy chọn ENCRYPTION
Xem nội dung
của một SP được lưu trong CSDL
Stored Procedure & Giao dịch 20
Cú pháp của câu lệnh DROP PROC
DROP {PROC|PROCEDURE} <tên thủ tục> [, …]
Cú pháp của câu lệnh ALTER PROC
ALTER {PROC|PROCEDURE} <tên thủ tục>
[<Danh sách tham số>]
[WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXECUTE AS>]]
AS <Các câu lệnh SQL>
Xóa/ Chỉnh sửa nội dung thủ tục
Cú pháp của câu lệnh DROP PROC
DROP {PROC|PROCEDURE} <tên thủ tục> [, …]
Cú pháp của câu lệnh ALTER PROC
ALTER {PROC|PROCEDURE} <tên thủ tục>
[<Danh sách tham số>]
[WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXECUTE AS>]]
AS <Các câu lệnh SQL>
Stored Procedure & Giao dịch 21
Câu lệnh tạo Stored Procedure
Demo
xóa/chỉnh sửa nội dung Stored Procedure
CREATE PROC spVendorState
@State varchar(20)
AS
SELECT VendorName FROM Vendors WHERE VendorState = @State
ALTER PROC spVendorState
@State varchar(20) = NULL
AS
IF @State IS NULL
SELECT VendorName FROM Vendors
ELSE
SELECT VendorName FROM Vendors WHERE VendorState = @State
Câu lệnh chỉnh sửa nội dung Stored Procedure
Stored Procedure & Giao dịch 22
ALTER PROC spVendorState
@State varchar(20) = NULL
AS
IF @State IS NULL
SELECT VendorName FROM Vendors
ELSE
SELECT VendorName FROM Vendors WHERE VendorState = @State
Câu lệnh chỉnh sửa nội dung Stored Procedure
Câu lệnh xóa thủ tục
DROP PROC spVendorState
Stored Procedure & Giao dịch 23
Xét dữ liệu trong hai bảng Invoices và InvoiceItemLine
tương ứng với InvoiceId = 12
Vấn đề không
nhất quán khi chèn dữ liệu
InvoiceTotal = ∑ InvoiceLineItemAmout
DECLARE @InvoiceID int
INSERT Invoices
VALUES (34, 'ZXA-080','2008-08-30', 14092.59, 0, 0,
3, '2008-09-30',NULL)
SET @InvoiceID = @@IDENTITY
INSERT InvoiceLineItems
VALUES (@InvoiceID, 1, 160, 4447.23, 'HW Upgrade')
INSERT InvoiceLineItems
VALUES (@InvoiceID, 2, 167, 9645.36, 'OS upgrade‘)
Stored Procedure & Giao dịch 24
DECLARE @InvoiceID int
INSERT Invoices
VALUES (34, 'ZXA-080','2008-08-30', 14092.59, 0, 0,
3, '2008-09-30',NULL)
SET @InvoiceID = @@IDENTITY
INSERT InvoiceLineItems
VALUES (@InvoiceID, 1, 160, 4447.23, 'HW Upgrade')
INSERT InvoiceLineItems
VALUES (@InvoiceID, 2, 167, 9645.36, 'OS upgrade‘)
- Câu lệnh Insert 1 và 2
thực thi thành công.
- Câu lệnh Insert 3 thực
thi thất bại.
Giao dịch (Transaction)
Để đảm bảo tính nhất quán của dữ liệu trong ví dụ trên.
Nếu một câu lệnh chèn trong ba câu lệnh chèn thực thi
thất bại. Tất cả các câu lệnh chèn phải được hủy bỏ
=> Các câu lệnh chèn trên phải được đặt trong một giao
dịch
Giao dịch
Giao dịch là một nhóm thao tác cơ sở dữ liệu được kết hợp
thành một đơn vị lôgíc.
Stored Procedure & Giao dịch 25
Để đảm bảo tính nhất quán của dữ liệu trong ví dụ trên.
Nếu một câu lệnh chèn trong ba câu lệnh chèn thực thi
thất bại. Tất cả các câu lệnh chèn phải được hủy bỏ
=> Các câu lệnh chèn trên phải được đặt trong một giao
dịch
Giao dịch
Giao dịch là một nhóm thao tác cơ sở dữ liệu được kết hợp
thành một đơn vị lôgíc.
Ví dụ về giao dịch
DECLARE @InvoiceID int
BEGIN TRY
BEGIN TRAN
INSERT Invoices
VALUES (34,'ZXA-080','2008-08-30',14092.59,
0,0,3,'2008-09-30',NULL, NULL)
SET @InvoiceID = @@IDENTITY
INSERT InvoiceLineItems
VALUES (@InvoiceID,1,160,4447.23,'HW upgrade')
INSERT InvoiceLineItems
VALUES (@InvoiceID,2,167,9645.36,'OS upgrade')
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
- 3 câu lệnh INSERT chỉ
được cập nhật thực sự vào
CSDL khi giao dịch được
COMMIT
- Khi một câu lệnh chèn
xảy ra lỗi. Câu lệnh
CATCH sẽ xử lý lỗi này và
thực hiện câu lệnh
ROLLBACK TRAN ->
Toàn bộ lệnh chèn sẽ bị
hủy bỏ.
Stored Procedure & Giao dịch 26
DECLARE @InvoiceID int
BEGIN TRY
BEGIN TRAN
INSERT Invoices
VALUES (34,'ZXA-080','2008-08-30',14092.59,
0,0,3,'2008-09-30',NULL, NULL)
SET @InvoiceID = @@IDENTITY
INSERT InvoiceLineItems
VALUES (@InvoiceID,1,160,4447.23,'HW upgrade')
INSERT InvoiceLineItems
VALUES (@InvoiceID,2,167,9645.36,'OS upgrade')
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH
- 3 câu lệnh INSERT chỉ
được cập nhật thực sự vào
CSDL khi giao dịch được
COMMIT
- Khi một câu lệnh chèn
xảy ra lỗi. Câu lệnh
CATCH sẽ xử lý lỗi này và
thực hiện câu lệnh
ROLLBACK TRAN ->
Toàn bộ lệnh chèn sẽ bị
hủy bỏ.
Nên sử dụng giao dịch trong các trường hợp sau:
Khi viết mã hai hay nhiều truy vấn thao tác tác động tới
các dữ liệu có liên kết
Khi cập nhật tham chiếu khóa ngoại.
Khi chuyển hàng từ bảng này sang bảng khác.
Khi bạn viết truy vấn SELECT trước một truy vấn thao tác,
và giá trị được chèn vào từ truy vấn thao tác này lại dựa
trên kết quả của truy vấn SELECT.
Khi sự thất bại của tập câu lệnh SQL nào đó sẽ vi phạm
tính toàn vẹn dữ liệu.
Các trường hợp sử dụng giao dịch
Nên sử dụng giao dịch trong các trường hợp sau:
Khi viết mã hai hay nhiều truy vấn thao tác tác động tới
các dữ liệu có liên kết
Khi cập nhật tham chiếu khóa ngoại.
Khi chuyển hàng từ bảng này sang bảng khác.
Khi bạn viết truy vấn SELECT trước một truy vấn thao tác,
và giá trị được chèn vào từ truy vấn thao tác này lại dựa
trên kết quả của truy vấn SELECT.
Khi sự thất bại của tập câu lệnh SQL nào đó sẽ vi phạm
tính toàn vẹn dữ liệu.
Stored Procedure & Giao dịch 27
Các câu lệnh xử lý giao dịch
Chú ý:
Có thể bỏ từ khóa TRAN khi viết câu lệnh COMMIT hoặc
ROLLBACK. Tuy nhiên nên viết mã có từ khóa này
Nếu không khai báo điểm bắt đầu cho giao dịch.
SQL Server sẽ xử lý mỗi câu lệnh là một giao dịch và tự động
COMMIT
Nếu câu lệnh gây lỗi sẽ tự động ROLLBACK
Câu lệnh Mô tả
BEGIN {TRAN|TRANSACTION} Đánh dấu điểm bắt đầu giao dịch.
SAVE {TRAN|TRASACTION} save_point Thiết lập điểm lưu trữ mới bên trong giao dịch.
COMMIT [TRAN|TRANSACTION] Đánh dấu điểm kết thúc giao dịch và thực hiện thay
đổi trong giao dịch, đồng thời thay đổi vĩnh viễn trên
CSDL
ROLLBACK [[TRAN|TRANSACTION]
[save_point]]
Roll-back (Quay lui) giao dịch tới điểm bắt đầu giao
dịch hoặc đến điểm lưu trữ xác định.
Stored Procedure & Giao dịch 28
Chú ý:
Có thể bỏ từ khóa TRAN khi viết câu lệnh COMMIT hoặc
ROLLBACK. Tuy nhiên nên viết mã có từ khóa này
Nếu không khai báo điểm bắt đầu cho giao dịch.
SQL Server sẽ xử lý mỗi câu lệnh là một giao dịch và tự động
COMMIT
Nếu câu lệnh gây lỗi sẽ tự động ROLLBACK
ROLLBACK [[TRAN|TRANSACTION]
[save_point]]
Roll-back (Quay lui) giao dịch tới điểm bắt đầu giao
dịch hoặc đến điểm lưu trữ xác định.
Ví dụ
Kiểm tra trước khi Commit giao dịch
BEGIN TRAN
DELETE Invoices
WHERE VendorID = 34
-- Nếu số hàng bị xóa bởi câu lệnh DELETE lớn hơn 1. Thực hiện
-- quay lui, không thực hiện lệnh xóa. Chỉ xóa khi số hàng bị ảnh hưởng bởi
-- lệnh DELETE nhỏ hơn 1
IF @@ROWCOUNT > 1
BEGIN
ROLLBACK TRAN
PRINT 'Deletions rolled back.'
END
ELSE
BEGIN
COMMIT TRAN
PRINT 'Deletions committed to the database.'
END
Stored Procedure & Giao dịch 29
BEGIN TRAN
DELETE Invoices
WHERE VendorID = 34
-- Nếu số hàng bị xóa bởi câu lệnh DELETE lớn hơn 1. Thực hiện
-- quay lui, không thực hiện lệnh xóa. Chỉ xóa khi số hàng bị ảnh hưởng bởi
-- lệnh DELETE nhỏ hơn 1
IF @@ROWCOUNT > 1
BEGIN
ROLLBACK TRAN
PRINT 'Deletions rolled back.'
END
ELSE
BEGIN
COMMIT TRAN
PRINT 'Deletions committed to the database.'
END
Giao dịch lồng (nested transaction) là giao dịch được viết
bên trong một giao dịch khác.
Mỗi khi câu lệnh BEGIN TRAN được thực thi, hàm hệ
thống @@TRANCOUNT được tăng thêm 1.
Khi thực thi câu lệnh COMMIT TRAN
Nếu @@TRANCOUNT > 1, các thay đổi sẽ không được
commit. Thay vào đó @@TRANCOUNT giảm đi 1.
Nếu @@TRANCOUNT = 1, mọi thay đổi đã được thực hiện
trên CSDL trong suốt giao dịch sẽ được commit và
@@TRANCOUNT được gán bằng 0.
Câu lệnh ROLLBACK TRAN roll-back toàn bộ các giao
dịch đang hoạt động và thiết lập giá trị cho
@@TRANCOUNT về 0.
Giao dịch lồng
Giao dịch lồng (nested transaction) là giao dịch được viết
bên trong một giao dịch khác.
Mỗi khi câu lệnh BEGIN TRAN được thực thi, hàm hệ
thống @@TRANCOUNT được tăng thêm 1.
Khi thực thi câu lệnh COMMIT TRAN
Nếu @@TRANCOUNT > 1, các thay đổi sẽ không được
commit. Thay vào đó @@TRANCOUNT giảm đi 1.
Nếu @@TRANCOUNT = 1, mọi thay đổi đã được thực hiện
trên CSDL trong suốt giao dịch sẽ được commit và
@@TRANCOUNT được gán bằng 0.
Câu lệnh ROLLBACK TRAN roll-back toàn bộ các giao
dịch đang hoạt động và thiết lập giá trị cho
@@TRANCOUNT về 0.
Stored Procedure & Giao dịch 30
Ví dụ về giao dịch lồng
BEGIN TRAN -- Bắt đầu giao dịch 2
PRINT 'First Tran @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT)
DELETE Invoices
BEGIN TRAN -- Bắt đầu giao dịch 2
PRINT 'Second Tran @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT)
DELETE Vendors
COMMIT TRAN -- Câu lệnh COMMIT này làm giảm giá trị @@TRANCOUNT.
-- Không COMMIT câu lệnh 'DELETE Vendors'.
PRINT 'COMMIT @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT)
ROLLBACK TRAN
PRINT 'ROLLBACK @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT)
PRINT ' '
DECLARE @VendorsCount int, @InvoicesCount int
SELECT @VendorsCount = COUNT (*) FROM Vendors
SELECT @InvoicesCount = COUNT (*) FROM Invoices
PRINT 'Vendors Count: ' + CONVERT (varchar , @VendorsCount)
PRINT 'Invoices Count: ' + CONVERT (varchar , @InvoicesCount)
Stored Procedure & Giao dịch 31
BEGIN TRAN -- Bắt đầu giao dịch 2
PRINT 'First Tran @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT)
DELETE Invoices
BEGIN TRAN -- Bắt đầu giao dịch 2
PRINT 'Second Tran @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT)
DELETE Vendors
COMMIT TRAN -- Câu lệnh COMMIT này làm giảm giá trị @@TRANCOUNT.
-- Không COMMIT câu lệnh 'DELETE Vendors'.
PRINT 'COMMIT @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT)
ROLLBACK TRAN
PRINT 'ROLLBACK @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT)
PRINT ' '
DECLARE @VendorsCount int, @InvoicesCount int
SELECT @VendorsCount = COUNT (*) FROM Vendors
SELECT @InvoicesCount = COUNT (*) FROM Invoices
PRINT 'Vendors Count: ' + CONVERT (varchar , @VendorsCount)
PRINT 'Invoices Count: ' + CONVERT (varchar , @InvoicesCount)
Câu lệnh ROLLBACK TRAN có thể quay lui giao dịch tới
điểm bắt đầu giao dịch hoặc đến điểm lưu trữ xác định.
Để câu lệnh ROLLBACK TRAN quay lui giao dịch đến
điểm lưu trữ xác định, thực hiện như sau
Tạo điểm lưu trữ sử dụng câu lệnh SAVE TRAN
Viết câu lệnh ROLLBACK TRAN kèm theo tên điểm lưu trữ
Nếu câu lệnh ROLLBACK TRAN không đi kèm tên điểm
lưu trữ. Câu lệnh này sẽ quay lui toàn bộ giao dịch
Điểm lưu trữ (save point)
Câu lệnh ROLLBACK TRAN có thể quay lui giao dịch tới
điểm bắt đầu giao dịch hoặc đến điểm lưu trữ xác định.
Để câu lệnh ROLLBACK TRAN quay lui giao dịch đến
điểm lưu trữ xác định, thực hiện như sau
Tạo điểm lưu trữ sử dụng câu lệnh SAVE TRAN
Viết câu lệnh ROLLBACK TRAN kèm theo tên điểm lưu trữ
Nếu câu lệnh ROLLBACK TRAN không đi kèm tên điểm
lưu trữ. Câu lệnh này sẽ quay lui toàn bộ giao dịch
Stored Procedure & Giao dịch 32
Demo
sử dụng điểm lưu trữ
IF OBJECT_ID ( 'tempdb..#VendorCopy' ) IS NOT NULL
DROP TABLE tempdb.. #VendorCopy
SELECT VendorID, VendorName INTO #VendorCopy FROM Vendors WHERE VendorID < 5
BEGIN TRAN
DELETE #VendorCopy WHERE VendorID = 1
SAVE TRAN Vendor1 -- Điểm lưu trữ 1
DELETE #VendorCopy WHERE VendorID = 2
SAVE TRAN Vendor2 -- Điểm lưu trữ 2
DELETE #VendorCopy WHERE VendorID = 3
SELECT * FROM #VendorCopy
ROLLBACK TRAN Vendor2 -- Quay lui về điểm lưu trữ 2
SELECT * FROM #VendorCopy
ROLLBACK TRAN Vendor1 -- Quay lui về điểm lưu trữ 1
SELECT * FROM #VendorCopy
COMMIT TRAN
SELECT * FROM #VendorCopy
Stored Procedure & Giao dịch 33
IF OBJECT_ID ( 'tempdb..#VendorCopy' ) IS NOT NULL
DROP TABLE tempdb.. #VendorCopy
SELECT VendorID, VendorName INTO #VendorCopy FROM Vendors WHERE VendorID < 5
BEGIN TRAN
DELETE #VendorCopy WHERE VendorID = 1
SAVE TRAN Vendor1 -- Điểm lưu trữ 1
DELETE #VendorCopy WHERE VendorID = 2
SAVE TRAN Vendor2 -- Điểm lưu trữ 2
DELETE #VendorCopy WHERE VendorID = 3
SELECT * FROM #VendorCopy
ROLLBACK TRAN Vendor2 -- Quay lui về điểm lưu trữ 2
SELECT * FROM #VendorCopy
ROLLBACK TRAN Vendor1 -- Quay lui về điểm lưu trữ 1
SELECT * FROM #VendorCopy
COMMIT TRAN
SELECT * FROM #VendorCopy
Các nội dung đã học trong bài
Stored Procedure (SP)
Là một tập các câu lệnh T-SQL thực hiện một nhiệm vụ
cụ thể, được đặt tên và lưu trữ trong CSDL dưới dạng
đã biên dịch.
Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored
Procedure thay vì viết và thực thi lại cùng một tập hợp các
câu lệnh.
Cú pháp
CREATE {PROC|PROCEDURE} <tên thủ tục>
[<Danh sách tham số>]
[WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXCECUTE AS>]]
AS <Các câu lệnh SQL>
Tổng kết
Các nội dung đã học trong bài
Stored Procedure (SP)
Là một tập các câu lệnh T-SQL thực hiện một nhiệm vụ
cụ thể, được đặt tên và lưu trữ trong CSDL dưới dạng
đã biên dịch.
Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored
Procedure thay vì viết và thực thi lại cùng một tập hợp các
câu lệnh.
Cú pháp
CREATE {PROC|PROCEDURE} <tên thủ tục>
[<Danh sách tham số>]
[WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXCECUTE AS>]]
AS <Các câu lệnh SQL>
Stored Procedure & Giao dịch 34
Hai loại tham số
Tham số đầu vào
– Tham số đầu vào bắt buộc
– Tham số đầu vào tùy chọn
Tham số đầu ra: Trả về giá trị cho đối tượng gọi SP
Hai cách trả về giá trị cho một SP
Sử dụng tham số đầu ra
Sử dụng câu lệnh RETURN
Gọi Stored Procedure: Sử dụng câu lệnh EXEC
Hai cách truyền tham số trong lời gọi
– Truyền theo vị trí
– Truyền theo tên
Tổng kết
Hai loại tham số
Tham số đầu vào
– Tham số đầu vào bắt buộc
– Tham số đầu vào tùy chọn
Tham số đầu ra: Trả về giá trị cho đối tượng gọi SP
Hai cách trả về giá trị cho một SP
Sử dụng tham số đầu ra
Sử dụng câu lệnh RETURN
Gọi Stored Procedure: Sử dụng câu lệnh EXEC
Hai cách truyền tham số trong lời gọi
– Truyền theo vị trí
– Truyền theo tên
Stored Procedure & Giao dịch 35
Giao dịch
Giao dịch là một nhóm thao tác cơ sở dữ liệu được kết hợp
thành một đơn vị lôgíc.
Chỉ khi giao dịch được COMMIT, các câu lệnh trong giao
dịch mới thực sự thay đổi CSDL
Khi một câu lệnh trong một giao dịch gây lỗi. Giao dịch sẽ
được quay lui (ROLLBACK) về điểm bắt đầu giao dịch hoặc
về điểm lưu trữ giao dịch
Tổng kết
Giao dịch
Giao dịch là một nhóm thao tác cơ sở dữ liệu được kết hợp
thành một đơn vị lôgíc.
Chỉ khi giao dịch được COMMIT, các câu lệnh trong giao
dịch mới thực sự thay đổi CSDL
Khi một câu lệnh trong một giao dịch gây lỗi. Giao dịch sẽ
được quay lui (ROLLBACK) về điểm bắt đầu giao dịch hoặc
về điểm lưu trữ giao dịch
Stored Procedure & Giao dịch 36

Weitere ähnliche Inhalte

Was ist angesagt?

Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHai Rom
 
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtHưởng Nguyễn
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Nguyễn Công Hoàng
 
Câu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPCâu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPZendVN
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTMasterCode.vn
 
Phương pháp luận nghiên cứu khoa học
Phương pháp luận nghiên cứu khoa họcPhương pháp luận nghiên cứu khoa học
Phương pháp luận nghiên cứu khoa họcTuấn Nguyễn Văn
 
Lý thuyết excel hàm excel
Lý thuyết excel   hàm excelLý thuyết excel   hàm excel
Lý thuyết excel hàm excelHọc Huỳnh Bá
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐỗ Đức Hùng
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệHưởng Nguyễn
 
Xây dựng biểu đồ use case
Xây dựng biểu đồ use caseXây dựng biểu đồ use case
Xây dựng biểu đồ use caseTrung Chinh Hà
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logickikihoho
 
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ Le Cuong
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3pisu412
 
Bài 6: Biểu mẫu
Bài 6: Biểu mẫuBài 6: Biểu mẫu
Bài 6: Biểu mẫuChâu Trần
 
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTBài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTMasterCode.vn
 

Was ist angesagt? (20)

Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanh
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuậtĐề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
Đề thi mẫu trắc nghiệm cấu trúc dữ liệu cà giải thuật
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
 
Câu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHPCâu hỏi trắc nghiệm PHP
Câu hỏi trắc nghiệm PHP
 
Đệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh CậnĐệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh Cận
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
 
Phương pháp luận nghiên cứu khoa học
Phương pháp luận nghiên cứu khoa họcPhương pháp luận nghiên cứu khoa học
Phương pháp luận nghiên cứu khoa học
 
Lý thuyết excel hàm excel
Lý thuyết excel   hàm excelLý thuyết excel   hàm excel
Lý thuyết excel hàm excel
 
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại viĐề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
 
Giải Cơ sở dữ liệu phân tán - PTIT
Giải Cơ sở dữ liệu phân tán - PTITGiải Cơ sở dữ liệu phân tán - PTIT
Giải Cơ sở dữ liệu phân tán - PTIT
 
Đề tài: Áp dụng Design Pattern trong phát triển phần mềm, 9đ
Đề tài: Áp dụng Design Pattern trong phát triển phần mềm, 9đĐề tài: Áp dụng Design Pattern trong phát triển phần mềm, 9đ
Đề tài: Áp dụng Design Pattern trong phát triển phần mềm, 9đ
 
Chuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệChuẩn hóa lược đồ quan hệ
Chuẩn hóa lược đồ quan hệ
 
Xây dựng biểu đồ use case
Xây dựng biểu đồ use caseXây dựng biểu đồ use case
Xây dựng biểu đồ use case
 
chuong 1. co so logic
chuong 1. co so logicchuong 1. co so logic
chuong 1. co so logic
 
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
Bài 6: Biểu mẫu
Bài 6: Biểu mẫuBài 6: Biểu mẫu
Bài 6: Biểu mẫu
 
Đệ quy và quay lui
Đệ quy và quay luiĐệ quy và quay lui
Đệ quy và quay lui
 
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPTBài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
Bài 2: Các khái niệm trong CSDL quan hệ - Giáo trình FPT
 

Andere mochten auch

Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPTBài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPTMasterCode.vn
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql. .
 
Bài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLBài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLMasterCode.vn
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTMasterCode.vn
 
Bài 7: Làm việc với truy vấn nâng cao - Giáo trình FPT
Bài 7: Làm việc với truy vấn nâng cao - Giáo trình FPTBài 7: Làm việc với truy vấn nâng cao - Giáo trình FPT
Bài 7: Làm việc với truy vấn nâng cao - Giáo trình FPTMasterCode.vn
 
Bài 4.1 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.1 - SQL (STRUCTURED QUERY  LANGUAGE) - SQL serverBài 4.1 - SQL (STRUCTURED QUERY  LANGUAGE) - SQL server
Bài 4.1 - SQL (STRUCTURED QUERY LANGUAGE) - SQL serverMasterCode.vn
 
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverBài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverMasterCode.vn
 
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTMasterCode.vn
 
Bài tập với câu lệnh select,insert, update, delete
Bài tập với câu lệnh select,insert, update, deleteBài tập với câu lệnh select,insert, update, delete
Bài tập với câu lệnh select,insert, update, deletevanphong20082002
 
Bài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPT
Bài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPTBài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPT
Bài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPTMasterCode.vn
 
Bài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverBài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverMasterCode.vn
 
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPTBài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPTMasterCode.vn
 
Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL serverBài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL serverMasterCode.vn
 
Bài 4.5 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.5 - SQL (STRUCTURED QUERY LANGUAGE) - SQL serverBài 4.5 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.5 - SQL (STRUCTURED QUERY LANGUAGE) - SQL serverMasterCode.vn
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnMasterCode.vn
 
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTBài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTMasterCode.vn
 
Trigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerTrigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerNguyễn Phúc
 
Bài 6 Làm việc với truy vấn cơ bản - Giáo trình FPT
Bài 6 Làm việc với truy vấn cơ bản - Giáo trình FPTBài 6 Làm việc với truy vấn cơ bản - Giáo trình FPT
Bài 6 Làm việc với truy vấn cơ bản - Giáo trình FPTMasterCode.vn
 

Andere mochten auch (20)

Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPTBài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
Bài 5: Hàm người dùng định nghĩa & VIEW - Giáo trình FPT
 
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
 
Bài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQLBài 5 : Lập trình với CSDL trong SQL
Bài 5 : Lập trình với CSDL trong SQL
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
 
Bài 7: Làm việc với truy vấn nâng cao - Giáo trình FPT
Bài 7: Làm việc với truy vấn nâng cao - Giáo trình FPTBài 7: Làm việc với truy vấn nâng cao - Giáo trình FPT
Bài 7: Làm việc với truy vấn nâng cao - Giáo trình FPT
 
Bài 4.1 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.1 - SQL (STRUCTURED QUERY  LANGUAGE) - SQL serverBài 4.1 - SQL (STRUCTURED QUERY  LANGUAGE) - SQL server
Bài 4.1 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
 
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL serverBài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
Bài 3 : Các ràng buộc toàn vẹn dữ liệu - SQL server
 
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPTBài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
Bài 1: Làm quen với SQL Server 2008 - Giáo trình FPT
 
Bài tập với câu lệnh select,insert, update, delete
Bài tập với câu lệnh select,insert, update, deleteBài tập với câu lệnh select,insert, update, delete
Bài tập với câu lệnh select,insert, update, delete
 
Bài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPT
Bài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPTBài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPT
Bài 3: Làm việc với kiểu dữ liệu và mã kịch bản - Giáo trình FPT
 
Trigger in SQL
Trigger in SQLTrigger in SQL
Trigger in SQL
 
Bài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL serverBài 2 : Các đối tượng trong CSDL - SQL server
Bài 2 : Các đối tượng trong CSDL - SQL server
 
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPTBài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
 
Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL serverBài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.2 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
 
Bài 4.5 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.5 - SQL (STRUCTURED QUERY LANGUAGE) - SQL serverBài 4.5 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
Bài 4.5 - SQL (STRUCTURED QUERY LANGUAGE) - SQL server
 
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPTBài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
Bài 6: Thiết kế cơ sở dữ liệu - Giáo trình FPT
 
Lập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vnLập trình sáng tạo creative computing textbook mastercode.vn
Lập trình sáng tạo creative computing textbook mastercode.vn
 
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPTBài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
Bài 1: Tổng quan về cơ sở dữ liệu - Giáo trình FPT
 
Trigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerTrigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL Server
 
Bài 6 Làm việc với truy vấn cơ bản - Giáo trình FPT
Bài 6 Làm việc với truy vấn cơ bản - Giáo trình FPTBài 6 Làm việc với truy vấn cơ bản - Giáo trình FPT
Bài 6 Làm việc với truy vấn cơ bản - Giáo trình FPT
 

Ähnlich wie Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT

Lap trinhcosodulieuvoi c-sharp_phan-3
Lap trinhcosodulieuvoi c-sharp_phan-3Lap trinhcosodulieuvoi c-sharp_phan-3
Lap trinhcosodulieuvoi c-sharp_phan-3Hiển Phùng
 
Qtu.vn sql - chuong 7
Qtu.vn  sql - chuong 7Qtu.vn  sql - chuong 7
Qtu.vn sql - chuong 7Hoang le Minh
 
HQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwww
HQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwwwHQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwww
HQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwwwDuyNguyn224958
 
Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Dũng Đinh
 
Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02huynhtrong774129
 
02 chuong2-laydulieutheocachconnected-140404114611-phpapp02
02 chuong2-laydulieutheocachconnected-140404114611-phpapp0202 chuong2-laydulieutheocachconnected-140404114611-phpapp02
02 chuong2-laydulieutheocachconnected-140404114611-phpapp02huynhtrong774129
 
02 chuong 2 - lay du lieu theo cach connected
02   chuong 2 - lay du lieu theo cach connected02   chuong 2 - lay du lieu theo cach connected
02 chuong 2 - lay du lieu theo cach connectedtruong le hung
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state managementhoangnguyentien
 
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)khanhtoankmz
 

Ähnlich wie Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT (20)

Lap trinhcosodulieuvoi c-sharp_phan-3
Lap trinhcosodulieuvoi c-sharp_phan-3Lap trinhcosodulieuvoi c-sharp_phan-3
Lap trinhcosodulieuvoi c-sharp_phan-3
 
Qtu.vn sql - chuong 7
Qtu.vn  sql - chuong 7Qtu.vn  sql - chuong 7
Qtu.vn sql - chuong 7
 
HQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwww
HQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwwwHQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwww
HQCSDL_ThuTucaaaaaaaaaaaaaaaaaaaâdâdáwww
 
slide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).pptslide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).ppt
 
Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1Hdth07 ltudql02-linq-ep1
Hdth07 ltudql02-linq-ep1
 
View sp trigger_udf
View sp trigger_udfView sp trigger_udf
View sp trigger_udf
 
Ung dung web chuong 7
Ung dung web  chuong 7Ung dung web  chuong 7
Ung dung web chuong 7
 
Ung dung web chuong 4
Ung dung web  chuong 4Ung dung web  chuong 4
Ung dung web chuong 4
 
Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02
 
02 chuong2-laydulieutheocachconnected-140404114611-phpapp02
02 chuong2-laydulieutheocachconnected-140404114611-phpapp0202 chuong2-laydulieutheocachconnected-140404114611-phpapp02
02 chuong2-laydulieutheocachconnected-140404114611-phpapp02
 
02 chuong 2 - lay du lieu theo cach connected
02   chuong 2 - lay du lieu theo cach connected02   chuong 2 - lay du lieu theo cach connected
02 chuong 2 - lay du lieu theo cach connected
 
Asp
AspAsp
Asp
 
Bai1.pdf
Bai1.pdfBai1.pdf
Bai1.pdf
 
Ung dung web chuong 5
Ung dung web  chuong 5Ung dung web  chuong 5
Ung dung web chuong 5
 
chuong_02.ppt
chuong_02.pptchuong_02.ppt
chuong_02.ppt
 
Unit Test
Unit TestUnit Test
Unit Test
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
 
Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)Cai tien trong lenh t sql cua sql server 2008 (2)
Cai tien trong lenh t sql cua sql server 2008 (2)
 
Dsd05 02b-json-rpca
Dsd05 02b-json-rpcaDsd05 02b-json-rpca
Dsd05 02b-json-rpca
 
Aspnet 3.5 _05
Aspnet 3.5 _05Aspnet 3.5 _05
Aspnet 3.5 _05
 

Mehr von MasterCode.vn

Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vnPd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vnMasterCode.vn
 
Why apps-succeed-wpr-mastercode.vn
Why apps-succeed-wpr-mastercode.vnWhy apps-succeed-wpr-mastercode.vn
Why apps-succeed-wpr-mastercode.vnMasterCode.vn
 
Dzone performancemonitoring2016-mastercode.vn
Dzone performancemonitoring2016-mastercode.vnDzone performancemonitoring2016-mastercode.vn
Dzone performancemonitoring2016-mastercode.vnMasterCode.vn
 
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vnGoogle công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vnMasterCode.vn
 
Nghiên cứu về khách hàng mastercode.vn
Nghiên cứu về khách hàng mastercode.vnNghiên cứu về khách hàng mastercode.vn
Nghiên cứu về khách hàng mastercode.vnMasterCode.vn
 
Pd fbuoi7 8--tongquanseo-mastercode.vn
Pd fbuoi7 8--tongquanseo-mastercode.vnPd fbuoi7 8--tongquanseo-mastercode.vn
Pd fbuoi7 8--tongquanseo-mastercode.vnMasterCode.vn
 
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vnPd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vnMasterCode.vn
 
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vnPdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vnMasterCode.vn
 
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vnPd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vnMasterCode.vn
 
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vnPd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vnMasterCode.vn
 
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vnPd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vnMasterCode.vn
 
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vnPdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vnMasterCode.vn
 
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vn
Pdfbài 7 máy tính xác tay và máy in   bảo trì sự cố máy tính-mastercode.vnPdfbài 7 máy tính xác tay và máy in   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vn
Pdfbài 6 bảo trì máy tính   bảo trì sự cố máy tính-mastercode.vnPdfbài 6 bảo trì máy tính   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vn
Pdfbài 5 bảo trì và tối ưu windows   bảo trì sự cố máy tính-mastercode.vnPdfbài 5 bảo trì và tối ưu windows   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vn
Pdfbài 4 ổ cứng hard drive   bảo trì sự cố máy tính-mastercode.vnPdfbài 4 ổ cứng hard drive   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vn
Pdfbài 3 cpu và ram   bảo trì sự cố máy tính-mastercode.vnPdfbài 3 cpu và ram   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vn
Pdfbài 1 giới thiệu chung về phần cứng   bảo trì sự cố máy tính-mastercode.vnPdfbài 1 giới thiệu chung về phần cứng   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdfbài 2 bo mạch chủ (main) bảo trì sự cố máy tính-mastercode.vn
Pdfbài 2 bo mạch chủ (main)   bảo trì sự cố máy tính-mastercode.vnPdfbài 2 bo mạch chủ (main)   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 2 bo mạch chủ (main) bảo trì sự cố máy tính-mastercode.vnMasterCode.vn
 
Pdf bai 7 làm việc với truy vấn nâng cao-slide 07-quan tri csdl voi access-ma...
Pdf bai 7 làm việc với truy vấn nâng cao-slide 07-quan tri csdl voi access-ma...Pdf bai 7 làm việc với truy vấn nâng cao-slide 07-quan tri csdl voi access-ma...
Pdf bai 7 làm việc với truy vấn nâng cao-slide 07-quan tri csdl voi access-ma...MasterCode.vn
 

Mehr von MasterCode.vn (20)

Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vnPd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
Pd ftai lieu-tieng-anh-cho-nguoi-moi-bat-dau-mastercode.vn
 
Why apps-succeed-wpr-mastercode.vn
Why apps-succeed-wpr-mastercode.vnWhy apps-succeed-wpr-mastercode.vn
Why apps-succeed-wpr-mastercode.vn
 
Dzone performancemonitoring2016-mastercode.vn
Dzone performancemonitoring2016-mastercode.vnDzone performancemonitoring2016-mastercode.vn
Dzone performancemonitoring2016-mastercode.vn
 
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vnGoogle công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
Google công bố thông tin lịch xu hướng ngành 2017 mastercode.vn
 
Nghiên cứu về khách hàng mastercode.vn
Nghiên cứu về khách hàng mastercode.vnNghiên cứu về khách hàng mastercode.vn
Nghiên cứu về khách hàng mastercode.vn
 
Pd fbuoi7 8--tongquanseo-mastercode.vn
Pd fbuoi7 8--tongquanseo-mastercode.vnPd fbuoi7 8--tongquanseo-mastercode.vn
Pd fbuoi7 8--tongquanseo-mastercode.vn
 
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vnPd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
Pd fbuoi5 6-ảnh hưởng của social media tới kết quả seo-mastercode.vn
 
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vnPdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
Pdf buoi3 4-link-building-tran-ngoc-chinh-mastercode.vn
 
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vnPd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
Pd fbuoi3 4-kỹ thuật xây dựng back link-mastercode.vn
 
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vnPd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
Pd fbuoi2 onpage – tối ưu hóa trang web-mastercode.vn
 
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vnPd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
Pd fbuoi1 giới thiệu seo tools cơ bản-seo manager + seo guy-mastercode.vn
 
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vnPdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
Pdf buoi1 2-on-page-tran-ngoc-chinh-mastercode.vn
 
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vn
Pdfbài 7 máy tính xác tay và máy in   bảo trì sự cố máy tính-mastercode.vnPdfbài 7 máy tính xác tay và máy in   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 7 máy tính xác tay và máy in bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vn
Pdfbài 6 bảo trì máy tính   bảo trì sự cố máy tính-mastercode.vnPdfbài 6 bảo trì máy tính   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 6 bảo trì máy tính bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vn
Pdfbài 5 bảo trì và tối ưu windows   bảo trì sự cố máy tính-mastercode.vnPdfbài 5 bảo trì và tối ưu windows   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 5 bảo trì và tối ưu windows bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vn
Pdfbài 4 ổ cứng hard drive   bảo trì sự cố máy tính-mastercode.vnPdfbài 4 ổ cứng hard drive   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 4 ổ cứng hard drive bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vn
Pdfbài 3 cpu và ram   bảo trì sự cố máy tính-mastercode.vnPdfbài 3 cpu và ram   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 3 cpu và ram bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vn
Pdfbài 1 giới thiệu chung về phần cứng   bảo trì sự cố máy tính-mastercode.vnPdfbài 1 giới thiệu chung về phần cứng   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 1 giới thiệu chung về phần cứng bảo trì sự cố máy tính-mastercode.vn
 
Pdfbài 2 bo mạch chủ (main) bảo trì sự cố máy tính-mastercode.vn
Pdfbài 2 bo mạch chủ (main)   bảo trì sự cố máy tính-mastercode.vnPdfbài 2 bo mạch chủ (main)   bảo trì sự cố máy tính-mastercode.vn
Pdfbài 2 bo mạch chủ (main) bảo trì sự cố máy tính-mastercode.vn
 
Pdf bai 7 làm việc với truy vấn nâng cao-slide 07-quan tri csdl voi access-ma...
Pdf bai 7 làm việc với truy vấn nâng cao-slide 07-quan tri csdl voi access-ma...Pdf bai 7 làm việc với truy vấn nâng cao-slide 07-quan tri csdl voi access-ma...
Pdf bai 7 làm việc với truy vấn nâng cao-slide 07-quan tri csdl voi access-ma...
 

Bài 4: STORED PROCEDURE & GIAO DỊCH - Giáo trình FPT

  • 1. Bài 4: STORED PROCEDURE & GIAO DỊCH
  • 2. Các nội dung đã học trong bài trước Làm việc với các kiểu dữ liệu Mã kịch bản Hệ thống bài cũ Stored Procedure & Giao dịch 2
  • 3. Mục tiêu 1. Stored Procedure Stored Procedure & Giao dịch 3 2. Giao dịch
  • 4. Stored Procedure & Giao dịch 4
  • 5. Các tùy chọn lập trình thủ tục trong Transact-SQL Kiểu Nhóm câu Lệnh (Batch) Lưu trữ Thực thi Tham số Mã kịch bản (Script) Gồm nhiều nhóm câu lệnh Trong file trên ổ đĩa Từ công cụ client như Management Studio hoặc SQLCMD Không Stored Procedure Duy nhất Trong đối tượng của CSDL Bởi ứng dụng hoặc trong mã kịch bản SQL Có Stored Procedure & Giao dịch 5 Stored Procedure Duy nhất Trong đối tượng của CSDL Bởi ứng dụng hoặc trong mã kịch bản SQL Có Hàm người dùng định nghĩa Duy nhất Trong đối tượng của CSDL Bởi ứng dụng hoặc trong mã kịch bản SQL Có Trigger Duy nhất Trong đối tượng của CSDL Tự động bởi server khi một truy vấn hành động cụ thể xảy ra Không
  • 6. Stored Procedure là một tập các câu lệnh T-SQL thực hiện một nhiệm vụ cụ thể, được đặt tên và lưu trữ trong CSDL dưới dạng đã biên dịch. Stored procedure cung cấp một phương pháp hữu ích cho việc thực thi lặp lại cùng một nhiệm vụ Giúp tái sử dụng code Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored Procedure thay vì viết và thực thi lại cùng một tập hợp các câu lệnh. Cách sử dụng các biến, cấu trúc điều khiển trong Stored Procedure tương tự như mã kịch bản Stored Procedured Stored Procedure là một tập các câu lệnh T-SQL thực hiện một nhiệm vụ cụ thể, được đặt tên và lưu trữ trong CSDL dưới dạng đã biên dịch. Stored procedure cung cấp một phương pháp hữu ích cho việc thực thi lặp lại cùng một nhiệm vụ Giúp tái sử dụng code Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored Procedure thay vì viết và thực thi lại cùng một tập hợp các câu lệnh. Cách sử dụng các biến, cấu trúc điều khiển trong Stored Procedure tương tự như mã kịch bản Stored Procedure & Giao dịch 6
  • 7. Ví dụ về Stored Procedured USE AP IF OBJECT_ID('spCopyInvoices') IS NOT NULL DROP PROC spCopyInvoices GO CREATE PROC spCopyInvoices AS IF OBJECT_ID('InvoiceCopy') IS NOT NULL DROP TABLE InvoiceCopy SELECT * INTO InvoiceCopy FROM Invoices Đoạn mã kịch bản tạo Stored Procedure spCopyInvoices, thực hiện copy dữ liệu từ bảng Invoices sang bảng Invoice Copy Stored Procedure & Giao dịch 7 USE AP IF OBJECT_ID('spCopyInvoices') IS NOT NULL DROP PROC spCopyInvoices GO CREATE PROC spCopyInvoices AS IF OBJECT_ID('InvoiceCopy') IS NOT NULL DROP TABLE InvoiceCopy SELECT * INTO InvoiceCopy FROM Invoices Mỗi lần thực hiện copy dữ liệu, chỉ cần thực hiện lời gọi SP EXEC spCopyInvoices
  • 8. Cú pháp: CREATE {PROC|PROCEDURE} <tên thủ tục> [<Danh sách tham số>] [WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXCECUTE AS>]] AS <Các câu lệnh SQL> Chú ý: Tên thủ tục Chứa tối đa 128 kí tự Nên đặt tên với tiền tố sp Câu lệnh CREATE PROC phải là câu lệnh đầu tiên của một nhóm câu lệnh Cú pháp Cú pháp: CREATE {PROC|PROCEDURE} <tên thủ tục> [<Danh sách tham số>] [WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXCECUTE AS>]] AS <Các câu lệnh SQL> Chú ý: Tên thủ tục Chứa tối đa 128 kí tự Nên đặt tên với tiền tố sp Câu lệnh CREATE PROC phải là câu lệnh đầu tiên của một nhóm câu lệnh Stored Procedure & Giao dịch 8
  • 9. Hai loại tham số: Tham số đầu vào Tham số bắt buộc – Bắt buộc phải truyền giá trị cho tham số này Tham số tùy chọn: – Đã được gán giá trị mặc định. – Nếu không truyền giá trị trong lời gọi thủ tục. Tham số sẽ nhận giá trị mặc định. Tham số đầu ra Sử dụng đề lấy kết quả trả về từ thủ tục Khai báo bằng từ khóa OUTPUT Cú pháp <danh sách tham số> @<tham số 1> <kiểu dữ liệu> [= <mặc định>] [OUTPUT|OUT] [, @<tham số 2> <kiểu dữ liệu> [= <mặc định>] [OUTPUT|OUT]]... Khai báo và làm việc với tham số Hai loại tham số: Tham số đầu vào Tham số bắt buộc – Bắt buộc phải truyền giá trị cho tham số này Tham số tùy chọn: – Đã được gán giá trị mặc định. – Nếu không truyền giá trị trong lời gọi thủ tục. Tham số sẽ nhận giá trị mặc định. Tham số đầu ra Sử dụng đề lấy kết quả trả về từ thủ tục Khai báo bằng từ khóa OUTPUT Cú pháp <danh sách tham số> @<tham số 1> <kiểu dữ liệu> [= <mặc định>] [OUTPUT|OUT] [, @<tham số 2> <kiểu dữ liệu> [= <mặc định>] [OUTPUT|OUT]]... Stored Procedure & Giao dịch 9
  • 10. Stored Procedure sử dụng một tham số đầu ra và hai tham số đầu vào Demo Sử dụng tham số đầu vào/đầu ra CREATE PROC spInvTotal3 @InvTotal money OUTPUT, @DateVar smalldatetime , @VendorVar varchar(40) = '%' AS -- Nếu @Date Var không được truyền giá trị -- Gán giá trị cho @DateVar bằng ngày hóa đơn nhỏ nhất IF @DateVar IS NULL SELECT @DateVar = MIN(InvoiceDate) FROM Invoices -- Truy xuất tổng số tiền của các hóa đơn có ngày hóa đơn lớn hơn @DateVar -- của nhà cung cấp có VendorName được lọc theo giá trị biến @VendorVar SELECT @InvTotal = SUM(InvoiceTotal) FROM Invoices JOIN Vendors ON Invoices.VendorID = Vendors.VendorID WHERE (InvoiceDate >= @DateVar) AND (VendorName LIKE @VendorVar) Tham số đầu ra Tham số đầu vào bắt buộc Tham số đầu vào tùy chọn Stored Procedure & Giao dịch 10 CREATE PROC spInvTotal3 @InvTotal money OUTPUT, @DateVar smalldatetime , @VendorVar varchar(40) = '%' AS -- Nếu @Date Var không được truyền giá trị -- Gán giá trị cho @DateVar bằng ngày hóa đơn nhỏ nhất IF @DateVar IS NULL SELECT @DateVar = MIN(InvoiceDate) FROM Invoices -- Truy xuất tổng số tiền của các hóa đơn có ngày hóa đơn lớn hơn @DateVar -- của nhà cung cấp có VendorName được lọc theo giá trị biến @VendorVar SELECT @InvTotal = SUM(InvoiceTotal) FROM Invoices JOIN Vendors ON Invoices.VendorID = Vendors.VendorID WHERE (InvoiceDate >= @DateVar) AND (VendorName LIKE @VendorVar)
  • 11. Hai cách truyền giá trị cho tham số Truyền theo tên Truyền theo vị trí Lời gọi thủ tục truyền tham số theo vị trí Demo Lời gọi thủ tục DECLARE @MyInvTotal money EXEC spInvTotal3 @MyInvTotal OUTPUT, '2008-06-01', 'P%' SELECT @MyInvTotal Hai cách truyền giá trị cho tham số Truyền theo tên Truyền theo vị trí Lời gọi thủ tục truyền tham số theo vị trí Stored Procedure & Giao dịch 11 DECLARE @MyInvTotal money EXEC spInvTotal3 @MyInvTotal OUTPUT, '2008-06-01', 'P%' SELECT @MyInvTotal
  • 12. Lời gọi thủ tục truyền tham số theo tên Lời gọi thủ tục không truyền giá trị cho tham số tùy chọn Demo Lời gọi thủ tục DECLARE @MyInvTotal money EXEC spInvTotal3 @DateVar = '2008-06-01', @VendorVar = 'P%', @InvTotal = @MyInvTotal OUTPUT Lời gọi thủ tục truyền tham số theo tên Lời gọi thủ tục không truyền giá trị cho tham số tùy chọn Stored Procedure & Giao dịch 12 DECLARE @MyInvTotal money EXEC spInvTotal3 @DateVar = '2008-06-01', @InvTotal = @MyInvTotal OUTPUT
  • 13. Giá trị trả về của thủ tục Sử dụng tham số OUTPUT để trả về giá trị có kiểu dữ liệu bất kì Sử dụng hàm RETURN để trả về giá trị số nguyên Cú pháp câu lệnh RETURN RETURN <biểu thức số nguyên> Làm việc với giá trị trả về Giá trị trả về của thủ tục Sử dụng tham số OUTPUT để trả về giá trị có kiểu dữ liệu bất kì Sử dụng hàm RETURN để trả về giá trị số nguyên Cú pháp câu lệnh RETURN RETURN <biểu thức số nguyên> Stored Procedure & Giao dịch 13
  • 14. Stored Procedure chứa câu lệnh RETURN Trả về số lượng hóa đơn của nhà cung cấp có VendorName thỏa mãn điều kiến lọc @VendorVar và có ngày hóa đơn lớn hơn giá trị của biến @DateVar Demo Làm việc với giá trị trả về CREATE PROC spInvCount @DateVar smalldatetime = NULL, @VendorVar varchar(40) = '%' AS IF @DateVar IS NULL SELECT @DateVar = MIN(InvoiceDate) FROM Invoices DECLARE @InvCount int SELECT @InvCount = COUNT(InvoiceID) FROM Invoices JOIN Vendors ON Invoices.VendorID = Vendors.VendorID WHERE ((InvoiceDate >= @DateVar) AND (VendorName LIKE @VendorVar)) RETURN @InvCount Stored Procedure & Giao dịch 14 CREATE PROC spInvCount @DateVar smalldatetime = NULL, @VendorVar varchar(40) = '%' AS IF @DateVar IS NULL SELECT @DateVar = MIN(InvoiceDate) FROM Invoices DECLARE @InvCount int SELECT @InvCount = COUNT(InvoiceID) FROM Invoices JOIN Vendors ON Invoices.VendorID = Vendors.VendorID WHERE ((InvoiceDate >= @DateVar) AND (VendorName LIKE @VendorVar)) RETURN @InvCount
  • 15. Demo Làm việc với giá trị trả về DECLARE @InvCount int EXEC @InvCount = spInvCount '2008-06-01', 'P%' PRINT 'Invoice count: ' + CONVERT(varchar, @InvCount) Lời gọi Stored Procedure Stored Procedure & Giao dịch 15
  • 16. Xử lý lỗi Câu lệnh TRY … CATCH Ngăn chặn lỗi Kiểm tra tính hợp lệ của dữ liệu. Nếu dữ liệu không hợp lệ, sử dụng câu lệnh RAISERROR để sinh lỗi. Kiểm tra tính hợp lệ của dữ liệu và tạo thông báo lỗi Xử lý lỗi Câu lệnh TRY … CATCH Ngăn chặn lỗi Kiểm tra tính hợp lệ của dữ liệu. Nếu dữ liệu không hợp lệ, sử dụng câu lệnh RAISERROR để sinh lỗi. Stored Procedure & Giao dịch 16
  • 17. Cú pháp RAISERROR ({<ID của thông báo lỗi>|<chuỗi thông báo>}, <độ nghiêm trọng>, <trạng thái>) Chú ý: Câu lệnh RAISERROR được truyền tham số <ID của thông báo lỗi> sẽ tạo một lỗi hệ thống Câu lệnh RAISERROR được truyền tham số <chuỗi thông báo> sẽ tạo một thông báo lỗi chính là tham số được truyền vào. Tham số <Độ nghiêm trọng> chỉ ra mức độ nghiêm trọng của lỗi. Giá trị từ 11 -> 19. Lỗi được tạo ra sẽ được xử lý trong khối CATCH Giá trị từ 20 -> 25. Kết nối từ client tới CSDL sẽ bị ngắt đột ngột Kiểm tra tính hợp lệ của dữ liệu và tạo thông báo lỗi Cú pháp RAISERROR ({<ID của thông báo lỗi>|<chuỗi thông báo>}, <độ nghiêm trọng>, <trạng thái>) Chú ý: Câu lệnh RAISERROR được truyền tham số <ID của thông báo lỗi> sẽ tạo một lỗi hệ thống Câu lệnh RAISERROR được truyền tham số <chuỗi thông báo> sẽ tạo một thông báo lỗi chính là tham số được truyền vào. Tham số <Độ nghiêm trọng> chỉ ra mức độ nghiêm trọng của lỗi. Giá trị từ 11 -> 19. Lỗi được tạo ra sẽ được xử lý trong khối CATCH Giá trị từ 20 -> 25. Kết nối từ client tới CSDL sẽ bị ngắt đột ngột Stored Procedure & Giao dịch 17
  • 18. Stored procedure kiểm tra khóa ngoại hợp lệ Chỉ thực hiện câu lệnh chèn dữ liệu vào bảng Invoices khi tham số đầu vào VendorID hợp lệ (đã tồn tại trong bảng Vendors) Demo kiểm tra tính hợp lệ của dữ liệu và tạo thông báo lỗi CREATE PROC spInsertInvoice @VendorID int, @InvoiceNumber varchar(50), @InvoiceDate smalldatetime, @InvoiceTotal money, @TermsID int, @InvoiceDueDate smalldatetime AS IF EXISTS (SELECT * FROM Vendors WHERE VendorID = @VendorID) BEGIN INSERT Invoices VALUES (@VendorID,@InvoiceNumber, @InvoiceDate,@InvoiceTotal,0,0, @TermsID,@InvoiceDueDate,NULL, NULL) END ELSE BEGIN RAISERROR('Not a valid VendorID!', 11, 1) END Stored Procedure & Giao dịch 18 CREATE PROC spInsertInvoice @VendorID int, @InvoiceNumber varchar(50), @InvoiceDate smalldatetime, @InvoiceTotal money, @TermsID int, @InvoiceDueDate smalldatetime AS IF EXISTS (SELECT * FROM Vendors WHERE VendorID = @VendorID) BEGIN INSERT Invoices VALUES (@VendorID,@InvoiceNumber, @InvoiceDate,@InvoiceTotal,0,0, @TermsID,@InvoiceDueDate,NULL, NULL) END ELSE BEGIN RAISERROR('Not a valid VendorID!', 11, 1) END
  • 19. Mã kịch bản gọi Stored Procedure Demo kiểm tra tính hợp lệ của dữ liệu và tạo thông báo lỗi BEGIN TRY EXEC spInsertInvoice 799,'ZXK-799', '2008-07-01', 299.95,1, '2008-08-01' END TRY BEGIN CATCH PRINT 'An error occurred.' PRINT 'Message: ' + CONVERT(varchar, ERROR_MESSAGE()) IF ERROR_NUMBER() = 50000 PRINT 'This is a custom error message.' END CATCH Stored Procedure & Giao dịch 19 BEGIN TRY EXEC spInsertInvoice 799,'ZXK-799', '2008-07-01', 299.95,1, '2008-08-01' END TRY BEGIN CATCH PRINT 'An error occurred.' PRINT 'Message: ' + CONVERT(varchar, ERROR_MESSAGE()) IF ERROR_NUMBER() = 50000 PRINT 'This is a custom error message.' END CATCH
  • 20. Sử dụng hàm SP_helptext Sp_helptext ‘Tên Stored Procedure’ Chú ý: Người dùng không thể xem nội dung của một Sp được định nghĩa sử dụng tùy chọn ENCRYPTION Xem nội dung của một SP được lưu trong CSDL Stored Procedure & Giao dịch 20
  • 21. Cú pháp của câu lệnh DROP PROC DROP {PROC|PROCEDURE} <tên thủ tục> [, …] Cú pháp của câu lệnh ALTER PROC ALTER {PROC|PROCEDURE} <tên thủ tục> [<Danh sách tham số>] [WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXECUTE AS>]] AS <Các câu lệnh SQL> Xóa/ Chỉnh sửa nội dung thủ tục Cú pháp của câu lệnh DROP PROC DROP {PROC|PROCEDURE} <tên thủ tục> [, …] Cú pháp của câu lệnh ALTER PROC ALTER {PROC|PROCEDURE} <tên thủ tục> [<Danh sách tham số>] [WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXECUTE AS>]] AS <Các câu lệnh SQL> Stored Procedure & Giao dịch 21
  • 22. Câu lệnh tạo Stored Procedure Demo xóa/chỉnh sửa nội dung Stored Procedure CREATE PROC spVendorState @State varchar(20) AS SELECT VendorName FROM Vendors WHERE VendorState = @State ALTER PROC spVendorState @State varchar(20) = NULL AS IF @State IS NULL SELECT VendorName FROM Vendors ELSE SELECT VendorName FROM Vendors WHERE VendorState = @State Câu lệnh chỉnh sửa nội dung Stored Procedure Stored Procedure & Giao dịch 22 ALTER PROC spVendorState @State varchar(20) = NULL AS IF @State IS NULL SELECT VendorName FROM Vendors ELSE SELECT VendorName FROM Vendors WHERE VendorState = @State Câu lệnh chỉnh sửa nội dung Stored Procedure Câu lệnh xóa thủ tục DROP PROC spVendorState
  • 23. Stored Procedure & Giao dịch 23
  • 24. Xét dữ liệu trong hai bảng Invoices và InvoiceItemLine tương ứng với InvoiceId = 12 Vấn đề không nhất quán khi chèn dữ liệu InvoiceTotal = ∑ InvoiceLineItemAmout DECLARE @InvoiceID int INSERT Invoices VALUES (34, 'ZXA-080','2008-08-30', 14092.59, 0, 0, 3, '2008-09-30',NULL) SET @InvoiceID = @@IDENTITY INSERT InvoiceLineItems VALUES (@InvoiceID, 1, 160, 4447.23, 'HW Upgrade') INSERT InvoiceLineItems VALUES (@InvoiceID, 2, 167, 9645.36, 'OS upgrade‘) Stored Procedure & Giao dịch 24 DECLARE @InvoiceID int INSERT Invoices VALUES (34, 'ZXA-080','2008-08-30', 14092.59, 0, 0, 3, '2008-09-30',NULL) SET @InvoiceID = @@IDENTITY INSERT InvoiceLineItems VALUES (@InvoiceID, 1, 160, 4447.23, 'HW Upgrade') INSERT InvoiceLineItems VALUES (@InvoiceID, 2, 167, 9645.36, 'OS upgrade‘) - Câu lệnh Insert 1 và 2 thực thi thành công. - Câu lệnh Insert 3 thực thi thất bại.
  • 25. Giao dịch (Transaction) Để đảm bảo tính nhất quán của dữ liệu trong ví dụ trên. Nếu một câu lệnh chèn trong ba câu lệnh chèn thực thi thất bại. Tất cả các câu lệnh chèn phải được hủy bỏ => Các câu lệnh chèn trên phải được đặt trong một giao dịch Giao dịch Giao dịch là một nhóm thao tác cơ sở dữ liệu được kết hợp thành một đơn vị lôgíc. Stored Procedure & Giao dịch 25 Để đảm bảo tính nhất quán của dữ liệu trong ví dụ trên. Nếu một câu lệnh chèn trong ba câu lệnh chèn thực thi thất bại. Tất cả các câu lệnh chèn phải được hủy bỏ => Các câu lệnh chèn trên phải được đặt trong một giao dịch Giao dịch Giao dịch là một nhóm thao tác cơ sở dữ liệu được kết hợp thành một đơn vị lôgíc.
  • 26. Ví dụ về giao dịch DECLARE @InvoiceID int BEGIN TRY BEGIN TRAN INSERT Invoices VALUES (34,'ZXA-080','2008-08-30',14092.59, 0,0,3,'2008-09-30',NULL, NULL) SET @InvoiceID = @@IDENTITY INSERT InvoiceLineItems VALUES (@InvoiceID,1,160,4447.23,'HW upgrade') INSERT InvoiceLineItems VALUES (@InvoiceID,2,167,9645.36,'OS upgrade') COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN END CATCH - 3 câu lệnh INSERT chỉ được cập nhật thực sự vào CSDL khi giao dịch được COMMIT - Khi một câu lệnh chèn xảy ra lỗi. Câu lệnh CATCH sẽ xử lý lỗi này và thực hiện câu lệnh ROLLBACK TRAN -> Toàn bộ lệnh chèn sẽ bị hủy bỏ. Stored Procedure & Giao dịch 26 DECLARE @InvoiceID int BEGIN TRY BEGIN TRAN INSERT Invoices VALUES (34,'ZXA-080','2008-08-30',14092.59, 0,0,3,'2008-09-30',NULL, NULL) SET @InvoiceID = @@IDENTITY INSERT InvoiceLineItems VALUES (@InvoiceID,1,160,4447.23,'HW upgrade') INSERT InvoiceLineItems VALUES (@InvoiceID,2,167,9645.36,'OS upgrade') COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN END CATCH - 3 câu lệnh INSERT chỉ được cập nhật thực sự vào CSDL khi giao dịch được COMMIT - Khi một câu lệnh chèn xảy ra lỗi. Câu lệnh CATCH sẽ xử lý lỗi này và thực hiện câu lệnh ROLLBACK TRAN -> Toàn bộ lệnh chèn sẽ bị hủy bỏ.
  • 27. Nên sử dụng giao dịch trong các trường hợp sau: Khi viết mã hai hay nhiều truy vấn thao tác tác động tới các dữ liệu có liên kết Khi cập nhật tham chiếu khóa ngoại. Khi chuyển hàng từ bảng này sang bảng khác. Khi bạn viết truy vấn SELECT trước một truy vấn thao tác, và giá trị được chèn vào từ truy vấn thao tác này lại dựa trên kết quả của truy vấn SELECT. Khi sự thất bại của tập câu lệnh SQL nào đó sẽ vi phạm tính toàn vẹn dữ liệu. Các trường hợp sử dụng giao dịch Nên sử dụng giao dịch trong các trường hợp sau: Khi viết mã hai hay nhiều truy vấn thao tác tác động tới các dữ liệu có liên kết Khi cập nhật tham chiếu khóa ngoại. Khi chuyển hàng từ bảng này sang bảng khác. Khi bạn viết truy vấn SELECT trước một truy vấn thao tác, và giá trị được chèn vào từ truy vấn thao tác này lại dựa trên kết quả của truy vấn SELECT. Khi sự thất bại của tập câu lệnh SQL nào đó sẽ vi phạm tính toàn vẹn dữ liệu. Stored Procedure & Giao dịch 27
  • 28. Các câu lệnh xử lý giao dịch Chú ý: Có thể bỏ từ khóa TRAN khi viết câu lệnh COMMIT hoặc ROLLBACK. Tuy nhiên nên viết mã có từ khóa này Nếu không khai báo điểm bắt đầu cho giao dịch. SQL Server sẽ xử lý mỗi câu lệnh là một giao dịch và tự động COMMIT Nếu câu lệnh gây lỗi sẽ tự động ROLLBACK Câu lệnh Mô tả BEGIN {TRAN|TRANSACTION} Đánh dấu điểm bắt đầu giao dịch. SAVE {TRAN|TRASACTION} save_point Thiết lập điểm lưu trữ mới bên trong giao dịch. COMMIT [TRAN|TRANSACTION] Đánh dấu điểm kết thúc giao dịch và thực hiện thay đổi trong giao dịch, đồng thời thay đổi vĩnh viễn trên CSDL ROLLBACK [[TRAN|TRANSACTION] [save_point]] Roll-back (Quay lui) giao dịch tới điểm bắt đầu giao dịch hoặc đến điểm lưu trữ xác định. Stored Procedure & Giao dịch 28 Chú ý: Có thể bỏ từ khóa TRAN khi viết câu lệnh COMMIT hoặc ROLLBACK. Tuy nhiên nên viết mã có từ khóa này Nếu không khai báo điểm bắt đầu cho giao dịch. SQL Server sẽ xử lý mỗi câu lệnh là một giao dịch và tự động COMMIT Nếu câu lệnh gây lỗi sẽ tự động ROLLBACK ROLLBACK [[TRAN|TRANSACTION] [save_point]] Roll-back (Quay lui) giao dịch tới điểm bắt đầu giao dịch hoặc đến điểm lưu trữ xác định.
  • 29. Ví dụ Kiểm tra trước khi Commit giao dịch BEGIN TRAN DELETE Invoices WHERE VendorID = 34 -- Nếu số hàng bị xóa bởi câu lệnh DELETE lớn hơn 1. Thực hiện -- quay lui, không thực hiện lệnh xóa. Chỉ xóa khi số hàng bị ảnh hưởng bởi -- lệnh DELETE nhỏ hơn 1 IF @@ROWCOUNT > 1 BEGIN ROLLBACK TRAN PRINT 'Deletions rolled back.' END ELSE BEGIN COMMIT TRAN PRINT 'Deletions committed to the database.' END Stored Procedure & Giao dịch 29 BEGIN TRAN DELETE Invoices WHERE VendorID = 34 -- Nếu số hàng bị xóa bởi câu lệnh DELETE lớn hơn 1. Thực hiện -- quay lui, không thực hiện lệnh xóa. Chỉ xóa khi số hàng bị ảnh hưởng bởi -- lệnh DELETE nhỏ hơn 1 IF @@ROWCOUNT > 1 BEGIN ROLLBACK TRAN PRINT 'Deletions rolled back.' END ELSE BEGIN COMMIT TRAN PRINT 'Deletions committed to the database.' END
  • 30. Giao dịch lồng (nested transaction) là giao dịch được viết bên trong một giao dịch khác. Mỗi khi câu lệnh BEGIN TRAN được thực thi, hàm hệ thống @@TRANCOUNT được tăng thêm 1. Khi thực thi câu lệnh COMMIT TRAN Nếu @@TRANCOUNT > 1, các thay đổi sẽ không được commit. Thay vào đó @@TRANCOUNT giảm đi 1. Nếu @@TRANCOUNT = 1, mọi thay đổi đã được thực hiện trên CSDL trong suốt giao dịch sẽ được commit và @@TRANCOUNT được gán bằng 0. Câu lệnh ROLLBACK TRAN roll-back toàn bộ các giao dịch đang hoạt động và thiết lập giá trị cho @@TRANCOUNT về 0. Giao dịch lồng Giao dịch lồng (nested transaction) là giao dịch được viết bên trong một giao dịch khác. Mỗi khi câu lệnh BEGIN TRAN được thực thi, hàm hệ thống @@TRANCOUNT được tăng thêm 1. Khi thực thi câu lệnh COMMIT TRAN Nếu @@TRANCOUNT > 1, các thay đổi sẽ không được commit. Thay vào đó @@TRANCOUNT giảm đi 1. Nếu @@TRANCOUNT = 1, mọi thay đổi đã được thực hiện trên CSDL trong suốt giao dịch sẽ được commit và @@TRANCOUNT được gán bằng 0. Câu lệnh ROLLBACK TRAN roll-back toàn bộ các giao dịch đang hoạt động và thiết lập giá trị cho @@TRANCOUNT về 0. Stored Procedure & Giao dịch 30
  • 31. Ví dụ về giao dịch lồng BEGIN TRAN -- Bắt đầu giao dịch 2 PRINT 'First Tran @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT) DELETE Invoices BEGIN TRAN -- Bắt đầu giao dịch 2 PRINT 'Second Tran @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT) DELETE Vendors COMMIT TRAN -- Câu lệnh COMMIT này làm giảm giá trị @@TRANCOUNT. -- Không COMMIT câu lệnh 'DELETE Vendors'. PRINT 'COMMIT @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT) ROLLBACK TRAN PRINT 'ROLLBACK @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT) PRINT ' ' DECLARE @VendorsCount int, @InvoicesCount int SELECT @VendorsCount = COUNT (*) FROM Vendors SELECT @InvoicesCount = COUNT (*) FROM Invoices PRINT 'Vendors Count: ' + CONVERT (varchar , @VendorsCount) PRINT 'Invoices Count: ' + CONVERT (varchar , @InvoicesCount) Stored Procedure & Giao dịch 31 BEGIN TRAN -- Bắt đầu giao dịch 2 PRINT 'First Tran @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT) DELETE Invoices BEGIN TRAN -- Bắt đầu giao dịch 2 PRINT 'Second Tran @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT) DELETE Vendors COMMIT TRAN -- Câu lệnh COMMIT này làm giảm giá trị @@TRANCOUNT. -- Không COMMIT câu lệnh 'DELETE Vendors'. PRINT 'COMMIT @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT) ROLLBACK TRAN PRINT 'ROLLBACK @@TRANCOUNT: ' + CONVERT(varchar,@@TRANCOUNT) PRINT ' ' DECLARE @VendorsCount int, @InvoicesCount int SELECT @VendorsCount = COUNT (*) FROM Vendors SELECT @InvoicesCount = COUNT (*) FROM Invoices PRINT 'Vendors Count: ' + CONVERT (varchar , @VendorsCount) PRINT 'Invoices Count: ' + CONVERT (varchar , @InvoicesCount)
  • 32. Câu lệnh ROLLBACK TRAN có thể quay lui giao dịch tới điểm bắt đầu giao dịch hoặc đến điểm lưu trữ xác định. Để câu lệnh ROLLBACK TRAN quay lui giao dịch đến điểm lưu trữ xác định, thực hiện như sau Tạo điểm lưu trữ sử dụng câu lệnh SAVE TRAN Viết câu lệnh ROLLBACK TRAN kèm theo tên điểm lưu trữ Nếu câu lệnh ROLLBACK TRAN không đi kèm tên điểm lưu trữ. Câu lệnh này sẽ quay lui toàn bộ giao dịch Điểm lưu trữ (save point) Câu lệnh ROLLBACK TRAN có thể quay lui giao dịch tới điểm bắt đầu giao dịch hoặc đến điểm lưu trữ xác định. Để câu lệnh ROLLBACK TRAN quay lui giao dịch đến điểm lưu trữ xác định, thực hiện như sau Tạo điểm lưu trữ sử dụng câu lệnh SAVE TRAN Viết câu lệnh ROLLBACK TRAN kèm theo tên điểm lưu trữ Nếu câu lệnh ROLLBACK TRAN không đi kèm tên điểm lưu trữ. Câu lệnh này sẽ quay lui toàn bộ giao dịch Stored Procedure & Giao dịch 32
  • 33. Demo sử dụng điểm lưu trữ IF OBJECT_ID ( 'tempdb..#VendorCopy' ) IS NOT NULL DROP TABLE tempdb.. #VendorCopy SELECT VendorID, VendorName INTO #VendorCopy FROM Vendors WHERE VendorID < 5 BEGIN TRAN DELETE #VendorCopy WHERE VendorID = 1 SAVE TRAN Vendor1 -- Điểm lưu trữ 1 DELETE #VendorCopy WHERE VendorID = 2 SAVE TRAN Vendor2 -- Điểm lưu trữ 2 DELETE #VendorCopy WHERE VendorID = 3 SELECT * FROM #VendorCopy ROLLBACK TRAN Vendor2 -- Quay lui về điểm lưu trữ 2 SELECT * FROM #VendorCopy ROLLBACK TRAN Vendor1 -- Quay lui về điểm lưu trữ 1 SELECT * FROM #VendorCopy COMMIT TRAN SELECT * FROM #VendorCopy Stored Procedure & Giao dịch 33 IF OBJECT_ID ( 'tempdb..#VendorCopy' ) IS NOT NULL DROP TABLE tempdb.. #VendorCopy SELECT VendorID, VendorName INTO #VendorCopy FROM Vendors WHERE VendorID < 5 BEGIN TRAN DELETE #VendorCopy WHERE VendorID = 1 SAVE TRAN Vendor1 -- Điểm lưu trữ 1 DELETE #VendorCopy WHERE VendorID = 2 SAVE TRAN Vendor2 -- Điểm lưu trữ 2 DELETE #VendorCopy WHERE VendorID = 3 SELECT * FROM #VendorCopy ROLLBACK TRAN Vendor2 -- Quay lui về điểm lưu trữ 2 SELECT * FROM #VendorCopy ROLLBACK TRAN Vendor1 -- Quay lui về điểm lưu trữ 1 SELECT * FROM #VendorCopy COMMIT TRAN SELECT * FROM #VendorCopy
  • 34. Các nội dung đã học trong bài Stored Procedure (SP) Là một tập các câu lệnh T-SQL thực hiện một nhiệm vụ cụ thể, được đặt tên và lưu trữ trong CSDL dưới dạng đã biên dịch. Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored Procedure thay vì viết và thực thi lại cùng một tập hợp các câu lệnh. Cú pháp CREATE {PROC|PROCEDURE} <tên thủ tục> [<Danh sách tham số>] [WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXCECUTE AS>]] AS <Các câu lệnh SQL> Tổng kết Các nội dung đã học trong bài Stored Procedure (SP) Là một tập các câu lệnh T-SQL thực hiện một nhiệm vụ cụ thể, được đặt tên và lưu trữ trong CSDL dưới dạng đã biên dịch. Khi thực thi lại một nhiệm vụ, sử dụng lời gọi Stored Procedure thay vì viết và thực thi lại cùng một tập hợp các câu lệnh. Cú pháp CREATE {PROC|PROCEDURE} <tên thủ tục> [<Danh sách tham số>] [WITH [RECOMPILE] [, ENCRYPTION] [, <mệnh đề EXCECUTE AS>]] AS <Các câu lệnh SQL> Stored Procedure & Giao dịch 34
  • 35. Hai loại tham số Tham số đầu vào – Tham số đầu vào bắt buộc – Tham số đầu vào tùy chọn Tham số đầu ra: Trả về giá trị cho đối tượng gọi SP Hai cách trả về giá trị cho một SP Sử dụng tham số đầu ra Sử dụng câu lệnh RETURN Gọi Stored Procedure: Sử dụng câu lệnh EXEC Hai cách truyền tham số trong lời gọi – Truyền theo vị trí – Truyền theo tên Tổng kết Hai loại tham số Tham số đầu vào – Tham số đầu vào bắt buộc – Tham số đầu vào tùy chọn Tham số đầu ra: Trả về giá trị cho đối tượng gọi SP Hai cách trả về giá trị cho một SP Sử dụng tham số đầu ra Sử dụng câu lệnh RETURN Gọi Stored Procedure: Sử dụng câu lệnh EXEC Hai cách truyền tham số trong lời gọi – Truyền theo vị trí – Truyền theo tên Stored Procedure & Giao dịch 35
  • 36. Giao dịch Giao dịch là một nhóm thao tác cơ sở dữ liệu được kết hợp thành một đơn vị lôgíc. Chỉ khi giao dịch được COMMIT, các câu lệnh trong giao dịch mới thực sự thay đổi CSDL Khi một câu lệnh trong một giao dịch gây lỗi. Giao dịch sẽ được quay lui (ROLLBACK) về điểm bắt đầu giao dịch hoặc về điểm lưu trữ giao dịch Tổng kết Giao dịch Giao dịch là một nhóm thao tác cơ sở dữ liệu được kết hợp thành một đơn vị lôgíc. Chỉ khi giao dịch được COMMIT, các câu lệnh trong giao dịch mới thực sự thay đổi CSDL Khi một câu lệnh trong một giao dịch gây lỗi. Giao dịch sẽ được quay lui (ROLLBACK) về điểm bắt đầu giao dịch hoặc về điểm lưu trữ giao dịch Stored Procedure & Giao dịch 36