Tải bản đầy đủ (.pdf) (10 trang)

Chương 14 Thủ tục lưu (Hướng dẫn thực hành) pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (359.67 KB, 10 trang )

Chương 14 Thủ tục lưu (Hướng dẫn thực hành)
Mục đích của chương 14
Kết thúc chương 14 bạn có thể:
 Tạo các thủ tục lưu trong Enterprise Manager bằng wizard, hoặc không cần wizard
 Sử dụng công cụ Query Analyzer để tạo các thủ tục lưu.
 Thực thi các thủ tục lưu trong Query Analyzer
 Biên dịch lại các thủ tục lưu trong Query Analyzer
 Sửa đổi các thủ tục lưu trong Query Analyzer và Enterprise Manager
 Sử dụng các tham số vào-ra cho các thủ tục
 Sử dụng các thủ tục lưu hệ thống.
 Xử lý các lỗi tính huống trong các thủ tục lưu
Các bước được đưa ra trong chương này là chi tiết, dễ hiểu. Nó được tạo ra với mục đích giúp
người đọc có thể học và hiểu công cụ một cách đầy đủ.
Hãy làm theo các bước sau một cách cẩn thận.
Phần I – Hướng dẫn Thời gian : 1 giờ 30
phút
14.1Thủ tục lưu
Mọi người sử dụng cơ sở dữ liệu đều quan tâm đến tốc độ và hiệu quả của cơ sở dữ liệu
đó. Thủ tục lưu giúp nâng cao tốc độ xử lý và hiệu quả của cơ sở dữ liệu. Thủ tục lưu là
tập hợp các câu lệnh T-SQL đã được biên dịch trước, được lưu trữ dưới một tên nhất
định, và được xử lý như một đơn vị
Thủ tục lưu có thể được tạo trong Enterprise Manager, bằng Wizard hoặc không.
14.1.1 Tạo Thủ tục lưu không cần Wizard.
Chúng ta hãy tạo một thủ tục lưu có tên là DisplayProducts trong cơ sở dữ liệu
Northwind,mà không sử dụng wizard. Thủ tục sẽ hiển thị các sản phẩm được cung cấp
bởi công ty Pavlova, Ltd. Các bước thực hiện như sau:
1. Nhấn đúp chuột vào cơ sở dữ liệu Northwind.
Một danh sách các đối tượng bên trong cơ sở dữ liệu Northwind được hiển thị.
2. Nhấn chuột phải vào đối tượng Stored Procedures, và chọn New Stored
Procedure… từ pop-up menu.
Hộp thoại Stored Procedure Properties – New Stored Procedure được hiển thị.


Thủ tục lưu 195
3. Nhập đoạn lệnh sau vào phần Text:
CREATE PROCEDURE DisplayProducts AS
SELECT productid, productname, unitprice
FROM products p, suppliers s
WHERE p.supplierid = s.supplierid
AND companyname = 'Pavlova, Ltd.'
Hình 14.1 Hiển thị hộp thoại với câu lệnh CREATE PROCEDURE
Hình 14.1: Tạo thủ tục lưu không cần Wizard
4. Nhấn vào nút bấm Check Syntax để kiểm tra sự chính xác về cú pháp của đoạn
mã.
Một thông báo được hiển thị, như trong hình 14.2.
Hình 14.2: Thông báo Syntax Check
196 Thiết kế cơ sở dữ liệu và thực hành với SQL Server
5. Nhấn vào nút bấm OK trên thông báo.
6. Nhấn vào nút bấm OK trong hộp thoại Stored Procedure Properties.
Thủ tục DisplayProducts đã được tạo ra, và xuất hiện trong ô vuông bên phải, đó là
danh sách các thủ tục lưu.
14.1.2 Tạo thủ tục lưu với Wizard
SQL Server wizard có thể được sử dụng để tạo một thủ tục lưu. Wizard giúp tạo các thủ
tục, các thủ tục này có thể được sử dụng để chèn, cập nhật và xóa dữ liệu từ một bảng.
Chúng ta có thể đồng thời tạo các thủ tục lưu cho mỗi thao tác dữ liệu hoạt động trên một
số bảng.
Hãy sử dụng wizard tạo hai thủ tục lưu trong cơ sở dữ liệu Northwind: một để xóa dữ
liệu từ bảng Categories, và thủ tục lưu còn lại để nhập thêm dữ liệu vào bảng
Customers. Các bước thực hiện như sau:
1. Nhấn chuột vào biểu tượng Run a Wizard trên thanh công cụ. Hoặc nhấn chuột
vào Tools trên menu và chọn tùy chọn Wizards từ drop-down menu.
2. Mở rộng tùy chọn Database.
Một danh sách các wizard được hiển thị.

3. Chọn tùy chọn Create Stored Procedure Wizard .
4. Nhấn chuột vào nút bấm OK để bắt đầu wizard.
Hộp thoại Create Stored Procedure Wizard được hiển thị.
5. Nhấn chuột vào nút bấm Next.
6. Bảo đảm rằng cơ sở dữ liệu Northwind đã được lựa chọn như Database name,
và nhấn vào nút bấm Next.
7. Đánh dấu vào hộp chọn Insert cho bảng Customers, và họp chọn Delete cho
bảng Categories, như trong hình 14.3.
Thủ tục lưu 197
Hình 14.3: Chọn các thủ tục lưu.
8. Nhấn chuột vào nút bấm Next .
9. Chọn Finish để tạo các thủ tục.
Một thông báo quá trình tạo các thủ tục đã thành công được hiển thị,như hình 14.4.
Hình 14.4: Thông báo về quá trình tạo thủ tục lưu bằng Wizard.
10.Nhấn chuột vào nút OK.
Hai thủ tục lưu mới tạo xuất hiện trong bên phải ô vuông mà liệt kê các thủ tục lưu.
14.1.3 Thực thi các thủ tục lưu
Để thực thi một thủ tục lưu, Chúng ta phải sử dụng câu lệnh EXECUTE trong Query
Analyzer. Chúng ta hãy thực thi thủ tục DisplayProducts đã được tạo từ đầu. Các bước
thực hiện như sau:
198 Thiết kế cơ sở dữ liệu và thực hành với SQL Server
1. Trong Enterprise Manager, chọn Tools | SQL Query Analyzer.
2. Trong cửa sổ truy vấn , nhập vào câu lệnh sau:
EXECUTE DisplayProducts
3. Nhấn vào nút chọn Execute Query trên thanh công cụ, hoặc nhấn phím F5
Thủ tục đã được thực thi , kết quả như trên hình 14.5.
Hình 14.5: Thi hành một thủ tục lưu.
14.1.4 Biên dịch lại thủ tục lưu .
Một thủ tục lưu bắt buộc phải được biên dịch lại để chắc chắn rằng các truy vấn trong
thủ tục đã được tối ưu hóa tương ứng với việc thay đổi các chỉ mục. Các thủ tục lưu có

thể được biên dịch lại theo ba cách sau:
 Sử dụng thủ tục lưu hệ thống sp_recompile
 Thêm tùy chọn WITH RECOMPILE cùng với câu lệnh CREATE PROCEDURE
 Thêm tùy chọn WITH RECOMPILE cùng với câu lệnh EXECUTE
Chúng ta hãy sử dụng câu lệnh EXECUTE cùng với tùy chọn WITH RECOMPILE để
chạy thủ tục DisplayProducts. Để xem tác động của tùy chọn, đầu tiên chúng ta sẽ thi
hành thủ tục mà không có tùy chọn.Chúng ta sẽ sử dụng lệnh SET STATISTICS TIME
ON để hiển thị số phần nghìn giây cần thiết để phân tích cú pháp, biên dịch và chạy mỗi
một câu lệnh.Các bước thực hiện như sau:
1. Trong cửa sổ truy vấn Query Analyzer, đánh vào đoạn lệnh sau:
SET STATISTICS TIME ON
EXECUTE DisplayProducts
2. Nhấn vào nút bấm Execute Query trên thanh công cụ,hoặc nhấn phím F5.
3. Chọn Messages tab ở duới của sổ Results.
Thủ tục lưu 199
Chi tiết của việc thực thi như phân tích cú pháp, biên dịch và thời gian thực hiện mỗi câu
lệnh được hiện thị trong hình 14.6.
Hình 14.6: Thời gian kiểm tra thực hiện thủ tục lưu.
Thời gian phân tích cú pháp và biên dịch là 0 phần nghìn giây. Bây giờ chúng ta thực thi
thủ tục lưu đó một lần nữa nhưng với tùy chọn WITH RECOMPILE.
4. Trong cửa sổ truy vấn Query Analyzer, nhập vào câu lệnh sau:
EXECUTE DisplayProducts WITH RECOMPILE
5. Nhấn vào nút bấm Execute Query trên thanh công cụ,hoặc nhấn phím F5.
6. Chọn tùy chọn Messages tab ở dưới cửa sổ Results.
Chi tiết quá trình thực thi được hiển thị trong hình 14.7.
200 Thiết kế cơ sở dữ liệu và thực hành với SQL Server
Hình 14.7: Thời gian kiểm tra thực thi thủ tục lưu
Thời gian phân tích cú pháp và biên dịch là 7 phần nghìn giây, thời gian này chỉ ra rằng
tùy chọn WITH RECOMPILE có tác động mạnh lên quá trình biên dịch một thủ tục lưu.
7. Đóng cửa sổ Query Analyzer.


14.1.5 Sửa đổi các thủ tục lưu.
Chúng ta có thể sử dụng công cụ Enterprise Manager để sửa đổi các thủ tục lưu.Chúng ta
sẽ sửa đổi thủ tục DisplayProducts để nó chấp nhận tên công ty như một tham số của
thủ tục.Thủ tục sẽ hiển thị các sản phẩm được cung cấp bởi một công ty đã được chỉ
định.Các bước thực hiện trong Enterprise Manager lần lượt như sau:
1. Chọn đối tượng Stored Procedures ở trong cơ sở dữ liệu Northwind.
2. Trong ô bên phải, nhấn chuột phải vào thủ tục DisplayProducts.
3. Chọn Properties từ pop-up menu.
4. Sửa đổi đoạn mã trong Text như sau:
CREATE PROCEDURE DisplayProducts
@v_coname VARCHAR(40)
AS
SELECT productid, productname, unitprice
FROM products p, suppliers s
WHERE p.supplierid = s.supplierid
Thủ tục lưu 201
AND companyname = @v_coname
GO
5. Nhấn vào nút bấm Check Syntax để kiểm tra sự chính xác về cú pháp của đoạn
mã .
6. Nhấn vào nút bấm OK trên hộp thoại thông báo việc kiểm tra cú pháp đã
thành công.
7. Nhấn vào nút bấm Apply để ghi lại những sự thay đổi .
8. Nhấn vào nút bấm OK để đóng hộp thoại Stored Procedure Properties.
14.1.6 Xóa các thủ tục lưu.
Chúng ta có thể sử dụng công cụ Enterprise Manager để xóa các thủ tục lưu.Bây giờ
chúng ta sẽ xóa thủ tục DisplayProducts. Các bước thực hiện trong Enterprise Manager
như sau:
1. Chọn đối tượng Stored Procedures ở trong cơ sở dữ liệu Northwind.

2. Trong ô bên phải, nhấn chuột phải vào thủ tục DisplayProducts.
3. Chọn Delete từ pop-up menu.
4. Trong hộp thoại Drop Objects, nhấn vào nút bấm Drop All .
Thủ tục lưu DisplayProducts đã được xóa và nó không còn xuất hiện trong ô bên phải
liệt kê các thủ tục lưu.
Phần II – Bài tập Thời gian : 30 phút
Thực hiện các thao tác sau trong Query Analyzer sử dụng cơ sở dữ liệu pubs :
1. Tạo một thủ tục lưu tên là Get_Sales_Avg có trường author ID là một tham số. Thủ tục sẽ
hiển thị the average year-to-date sales made on all titles written by the author. Sử dụng
câu lệnh CREATE PROCEDURE, và một biến cục bộ cho tham số.
2. Thực thi thủ tục Get_Sales_Avg để chắc chắn rằng nó đã được biên dịch lại . Chuyền tham
số author ID là 267-41-2394 cho thủ tục. Sử dụng câu lệnh EXECUTE với tùy chọn WITH
RECOMPILE.
3. Hiển thị tên của tất cả các thủ tục lưu được khai báo trong cơ sở dữ liệu pubs. Sử dụng thủ
tục lưu hệ thống sp_stored_procedures.
4. Hiển thị mã cho thủ tục lưu Get_Sales_Avg. Sử dụng thủ tục lưu hệ thống sp_helptext.
Phần III – Bài tập về nhà.
Thực hiện các thao tác sau trong Query Analyzer sử dụng cơ sở dữ liệu pubs:
202 Thiết kế cơ sở dữ liệu và thực hành với SQL Server
1. Sửa đổi thủ tục lưu Get_Sales_Avg đã được tạo trong phần II. Thủ tục sẽ ghi lại lỗi nếu
trường author ID được nhập vào không đúng. Nếu trường author ID đúng, the average year-
to-date sales for all titles written by the author sẽ được trả về.
2. Thực hiện việc sửa đổi thủ tục Get_Sales_Avg cho author ID 267-41-2394. Nếu giá trị được
trả về bởi thủ tục là lớn hơn 5000, sẽ hiện thị một thông báo là ‘High year-to-date sales’.
Các trường hợp khác sẽ hiển thị thông báo ‘Low year-to-date sales’. Nếu trường author ID
không đúng, không một thông báo nào liên quan đến việc bán hàng được hiển thị.
Thủ tục lưu 203
This page has been intentionally left blank.
204 Thiết kế cơ sở dữ liệu và thực hành với SQL Server

×