Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
52 KB
Nội dung
1 Bài8:Thủtục (Stored Procedure) • Khai báo thủtục • Tham số EXECUTE AS – AS CALLER – AS OWNER – AS SELF • Thiết lập thủtục tự động – sp_procoption 2 Khai báo thủtục Cú pháp: CREATE PROC[EDURE] schema. procedure_name [ {@parameter data_type} [= default] [OUTPUT] ] [, n] [WITH {RECOMPILE | ENCRYPTION | EXECUTE AS { CALLER} }] AS sql_statement [ n] return EXECUTE AS CALLER: chỉ định là user muốn thực hiện thủtục phải có quyền thực hiên trên thủtục này, và có các quyền tương ứng trên các objects trong thủ tục. 3 Thực hiện thủtục EXEC [ UTE ] {[@return_status=] {procedure_name[;number]|@procedure_name_var} [[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]] [, n] [WITHRECOMPILE] } 4 VD: Tìm số lớn nhất trong 3 số a,b,c Use Test CREATE PROCEDURE dbo.MaxABC @a real=1, @b real=9, @c real=10, @max real output as set @max=@a if @max <@b set @max=@b if @max <@c set @max=@c return @max GO declare @max real,@return_status real exec @return_status = dbo.maxabc 100, default, default, @max output print @max print @return_status 5 Tìm USCLN Create proc uscln @a int, @b int, @c int output as declare @r int set @r= @a % @b While @r<>0 Begin set @a=@b Set @b=@r set @r= @a % @b End Set @c=@b return @c 6 Thủtục đệ qui Create proc gt @i int, @j int,@m int output as declare @dum int, @t int if @i>1 Begin set @t=@i*@j set @i=@i-1 exec @dum=gt @i,@t,@m output End else set @m=@j declare @gt1 int exec gt 4,1, @gt1 output print @gt1 7 Gía cao nhất của các sản phẩm %Bikes% với ngưỡng @maxprice Use AdventureWorks Alter PROCEDURE Production.usp_GetList @product varchar(40), @maxprice money , @compareprice money OUTPUT, @listprice money OUTPUT AS SET @listprice = (SELECT MAX(p.ListPrice) FROM Production.Product p JOIN Production.ProductSubcategory s ON p.ProductSubcategoryID = s.ProductSubcategoryID WHERE s.Name LIKE @product AND p.ListPrice <@maxprice); Populate the output variable @compareprice. SET @compareprice = @maxprice; 8 Chạy thử với giá max=$10, $700 DECLARE @compareprice money, @cost money EXECUTE Production.usp_GetList '%Bikes%', 10, @compareprice OUT, @cost OUTPUT IF @cost <= @compareprice BEGIN PRINT 'These products can be purchased for less than $'+RTRIM(CAST(@compareprice AS varchar(20)))+'.' END ELSE PRINT 'The prices for all products in this category exceed $'+ RTRIM(CAST(@compareprice AS varchar(20)))+'.' 9 Sử dụng tham số cursor output USE AdventureWorks; GO CREATE PROCEDURE dbo.currency_cursor @currency_cursor CURSOR VARYING OUTPUT AS SET @currency_cursor = CURSOR FORWARD_ONLY STATIC FOR SELECT CurrencyCode, Name FROM Sales.Currency; OPEN @currency_cursor; GO 10 Sử dụng tham số cursor output (2) USE AdventureWorks; GO DECLARE @MyCursor CURSOR; EXEC dbo.currency_cursor @currency_cursor = @MyCursor OUTPUT; WHILE (@@FETCH_STATUS = 0) BEGIN; FETCH NEXT FROM @MyCursor; END; CLOSE @MyCursor; DEALLOCATE @MyCursor; [...]... MaSP, TenSP, Soluong,DonGia) 16 Bài tập 2 - Cho một file dữ liệu Input.txt gồm các xâu kí tự như trong bài tập 1 - Giả sử có hai bảng: DMSanPham(MaSP, TenSP) và bảng NhapHangHoa (MaHD, NguoiNhap, GhiChu, MaSP, Soluong, DonGia) - Hãy viết thủtục hoặc hàm phân tích từng xâu kí tự trong file: - Nếu MaSP chưa có trong DMSanPham(MaSP, TenSP) thì ta chèn MaSP và TenSP vào bảng này - Chèn các giá trị MaHD, NguoiNhap,... vào bảng NhapHangHoa 17 Bài tập 3 - Cho một file dữ liệu Input.txt như trong bài tập 3 - Giả sử có ba bảng: DMSanPham(MaSP, TenSP), bảng NhapHangHoa (MaHD, NguoiNhap, GhiChu) và bảng NhapHangHoaChiTiet (MaHD, MaSP, Soluong,DonGia) - Hãy viết thủtục hoặc hàm phân tích từng xâu kí tự trong file: - Nếu MaSP chưa có trong DMSanPham(MaSP, TenSP) thì ta chèn MaSP và TenSP vào bảng này - Nếu MaHD chưa có trong... @RowStart and RowNumber 0 Begin SET @PageNumber = @PageNumber -1 SET @RowStart = @PageSize * @PageNumber + 1; SET @RowEnd = @RowStart + @PageSize - 1; With Cust AS (... values(user_name(),getdate()) exec sp_procoption N'StartUpProcAudit', N'startup', N'true' 15 Bài tập 1 Cho một xâu kí tự là một tập hợp các phần tử viết cách nhau bởi một dấu ‘.’ Mỗi phần tử gồm có bảy thành phần, các thành phần viết cách nhau một dấu ‘;’ Ví dụ:Mã Hóa Đơn, Người Nhập, Ghi Chú, Mã Sản Phẩm; Tên Sản Phẩm; Số lượng; Đơn giá - Viết thủtục hoặc hàm phân tích xâu kí tự trên và lấy ra các hóa đơn sau đó Insert... kí tự trong file: - Nếu MaSP chưa có trong DMSanPham(MaSP, TenSP) thì ta chèn MaSP và TenSP vào bảng này - Nếu MaHD chưa có trong bảng NhapHangHoa thì chèn giá trị MaHD, NguoiNhap, GhiChu vào bảng này - Chèn các giá trị MaHD,MaSP,SoLuong,DonGia vào bảng NhapHangHoaChiTiet 18 . 1 Bài 8: Thủ tục (Stored Procedure) • Khai báo thủ tục • Tham số EXECUTE AS – AS CALLER – AS OWNER – AS SELF • Thiết lập thủ tục tự động – sp_procoption 2 Khai báo thủ tục Cú pháp:. chỉ định là user muốn thực hiện thủ tục phải có quyền thực hiên trên thủ tục này, và có các quyền tương ứng trên các objects trong thủ tục. 3 Thực hiện thủ tục EXEC [ UTE ] {[@return_status=] {procedure_name[;number]|@procedure_name_var} [[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]] [,. bài tập 1 - Giả sử có hai bảng: DMSanPham(MaSP, TenSP) và bảng NhapHangHoa (MaHD, NguoiNhap, GhiChu, MaSP, Soluong, DonGia) - Hãy viết thủ tục hoặc hàm phân tích từng xâu kí tự trong file: - Nếu