Root

Welcome to Root.niceboards.org
Chào mừng bạn đến với 4rum học tập, chia sẻ kinh nghiệm và Tài liệu, Ebook miễn phí
Nếu đã có tài khoản vui lòng đăng nhập hoặc chỉ mất 30s để Đăng ký
Thanks!
Root

Hôm qua là quá khứ - Ngày mai là bí ẩn - Hôm nay là một món quà


You are not connected. Please login or register

Viết Store PROCEDURE phần 1

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

1 Viết Store PROCEDURE phần 1 on Tue Sep 28, 2010 2:12 am

Admin


Admin
Store procedure thêm, sửa, xóa một chuyên mục
Thường bạn viết các PROC để xử lý các hành động thêm, sửa, xóa một bản ghi bạn tách ra làm 3 PROC, Ở đây mính sẽ viết PROC spTB_Category_Edit để thực hiện cả 3 hành động trên
-- Bạn hãy tạo cho mình thói quen viết PROC theo quy tắc, ở đây mình luôn viết sp sau đó đến tên bảng ...
-- Create by [You must be registered and logged in to see this link.]
CREATE PROC [dbo].[spTB_Category_Edit]
@Action int,
@CateID int,
@ParentID int,
@CateName nvarchar(250),
@Link nvarchar(250),
@Target nvarchar(20),
@Active int

AS

BEGIN

-- Nếu @Action=0 --> Xóa chuyên mục theo @CateID

IF @Action=0

BEGIN

DELETE FROM TB_Category WHERE CateID=@CateID

END

-- Nếu Nếu @Action=1 --> Thêm mới hoặc sửa Chuyên mục

ELSE

IF @Action=1

IF @ParentID = 0 SET @ParentID = NULL

BEGIN

--Nếu @CateID=0 --> Thêm mới chuyên mục

INSERT INTO

TB_Category

(

ParentID,

CateName,

Link,

Target,

Active

)

VALUES

(

@ParentID,

@CateName,

@Link,

@Target,

@Active

)

-- Cập nhật định dạng cho chuyên mục vừa thêm

-- Nếu lệnh thêm ở trên không xảy ra lỗi

IF @@ERROR=0

BEGIN

DECLARE @CssClass nvarchar(50)

DECLARE @Decen int

SELECT @Decen =Decen FROM TB_Category WHERE CateID=(SELECT MAX(CateID) FROM TB_Category)

IF @Decen IS NULL SET @Decen=0

if @Decen =0 SET @CssClass='MenuLevel_1'

if @Decen =1 SET @CssClass='MenuLevel_2'

if @Decen =2 SET @CssClass='MenuLevel_3'

if @Decen =3 SET @CssClass='MenuLevel_4'

if @Decen =4 SET @CssClass='MenuLevel_5'

UPDATE TB_Category

SET CssClass = @CssClass WHERE CateID=(SELECT MAX(CateID) FROM TB_Category)

END

END

-- Nếu @CateID>0 --> Cập nhật Category Theo CateID

IF @CateID>0

BEGIN

UPDATE TB_Category

SET



ParentID = @ParentID,

CateName = @CateName,

Link = @Link,

Target = @Target,

Active = @Active

WHERE CateID=@CateID

IF @@ERROR=0

BEGIN

DECLARE @CssClass1 nvarchar(50)

DECLARE @Decen1 int

SELECT @Decen1 =Decen FROM TB_Category WHERE CateID=@CateID

IF @Decen1 IS NULL SET @Decen1=0



if @Decen1 =0 SET @CssClass1='MenuLevel_1'

if @Decen1 =1 SET @CssClass1='MenuLevel_2'

if @Decen1 =2 SET @CssClass1='MenuLevel_3'

if @Decen1 =3 SET @CssClass1='MenuLevel_4'

if @Decen1 =4 SET @CssClass1='MenuLevel_5'

UPDATE TB_Category

SET CssClass = @CssClass1 WHERE CateID=@CateID

END

END

END
Trong Proc này ta sẽ thấy hành động
Nếu @Action=0 thì thực hiện việc xóa theo CateID
Nếu @Action=1 (Hoặc bạn có thể để Else vậy là đủ nếu trong điều kiện Else không có nhiều điều kiện khác) thì phụ thuộc vào @CateID. Nếu @CateID=0 thì Thêm mới, Nếu @CateID>0 thì cập nhật theo CateID
-- Các trường Decen và Depth đã được tự động xử lý trong Trigger trong bài trước
-- Trường CssClass cũng sẽ được cập nhật tự động trong PROC này, và trong Project của bạn cũng cần viết các MenuLevel tương ứng để hiển thị trên website

2. Store procedure Select TB_Category theo dạng cây chuyên mục

-- Create by [You must be registered and logged in to see this link.]

CREATE PROCEDURE [dbo].[spTB_Category_GetTree]

@CateID int

AS

BEGIN

IF @CateID =0

BEGIN

SELECT

CateID,

ParentID,

CASE Decen

WHEN 0 THEN CateName

WHEN 1 THEN ':: '+ CateName

WHEN 2 THEN ':: -- '+ CateName

WHEN 3 THEN ':: -- .. ' + CateName

WHEN 4 THEN ':: -- .. .. ' +CateName

WHEN 5 THEN ':: -- .. .. .. ' +CateName

END AS CateName,

Decen,

Depth,

Link,

Target,

CssClass, Active

FROM TB_Category

ORDER BY Depth ASC

END

ELSE

BEGIN

SELECT CateID, ParentID,

CASE Decen

WHEN 0 THEN CateName

WHEN 1 THEN ':: '+ CateName

WHEN 2 THEN ':: -- '+ CateName

WHEN 3 THEN ':: -- .. ' + CateName

WHEN 4 THEN ':: -- .. .. ' +CateName

WHEN 5 THEN ':: -- .. .. .. ' +CateName

END AS CateName,

Decen,

Depth,

Link,

Target,

CssClass,

Active

FROM TB_Category

WHERE Depth LIKE (SELECT Depth FROM TB_Category WHERE TB_Category.CateID=@CateID) + '%'

ORDER BY Depth asc

END

END
Trong store trên Mình hiển thị đến Menu cấp 5. Nếu ứng dụng của bạn có nhiều cấp hơn 5 thì bạn có thể sửa theo yêu cầu
Đề xem toàn bộ tree chuyên mục của bạn bạn dùng lệnh sau EXEC spTB_Category @CateID=0 -->Kết quả như sau (Demo)



Để hiển thị cây của chuyên mục thể thao bạn dùng lệnh EXEC spTB_Category_GetTree 5 --> Kết quả như sau:



3. Store procedure xóa SubTree

Thủ tục sau sẽ xóa toàn bộ một chuyên mục và tất cả cấp "con" của nó (Xóa SubTree). Bạn viết thủ tục như sau:
-- ================================
-- Author: [You must be registered and logged in to see this link.]
-- ================================
CREATE PROCEDURE [dbo].[spTB_ChuyenMuc_DeleteNode]
@CateID int
AS
BEGIN
DELETE FROM TB_Category
WHERE Depth LIKE (
SELECT Depth FROM TB_Category WHERE CateID = @CateID
) + '%'
END
--Lưu ý là khi bạn xóa chuyên muc hoặc Subtree bạn cần chắc chắn muốn xóa và cần xóa hế quan hệ dữ liệu

Xem lý lịch thành viên http://root.nicetopic.net

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

Permissions in this forum:
Bạn không có quyền trả lời bài viết