Cấp bậc tác giả:

DATABASE

Hướng dẫn xây dựng website: Viết store procedure phần 2

Được viết bởi QuangIT ngày 13/08/2012 lúc 07:29 PM
Tiếp theo các thủ tục và hàm cho bảng TB_Category. Khi lập trình tốt trong SQL thì bạn sẽ đỡ rất nhiều việc khi viết code (asp.net)
  • 0
  • 9064

Hướng dẫn xây dựng website: Viết store procedure phần 2

Tiếp theo các thủ tục và hàm cho bảng TB_Category. Khi lập trình tốt trong SQL thì bạn sẽ đỡ rất nhiều việc khi viết code (asp.net)

1. Hàm lấy tên miền của ứng dụng

Bạn cần viết một hàm lấy thông tin domain của bạn để tiện cho việc viết các Store proceduce

-- ================================
-- Author:  webmaster@hmweb.com.vn
-- ================================
CREATE   FUNCTION dbo.ufDomainName()
RETURNS VarChar(100) 
AS  
BEGIN 
      RETURN 'http://www.hmweb.com.vn'
END
2. Thủ tục hiển thị menu đa cấp 

Thủ tục sau sẽ thực hiện việc hiển thị menu đa cấp, tất cả sẽ được thực hiện bằng Store, Trong code khi muốn hiển thị menu đa cấp bạn chỉ cần dùng Gridview để hiển thị.
-- Trong thủ tục này mình chỉ viết đến cấp 3. Nếu website của bạn có nhiều hơn 3 cấp bạn có thể sửa lại cho phù hợp (website của mình hmweb.com.vn cũng đến cấp 3)

-- ================================
-- Author:  webmaster@hmweb.com.vn
-- ================================
CREATE PROCEDURE [dbo].[spTB_Category_LeftMenu]
@TabID int, 
@CateID int
AS
-- Nếu @TabID=0 thì Menu chỉ gồm cấp 1
IF @TabID=0
BEGIN
       SELECT
            TB_Category.CateID, 
            TB_Category.ParentID, 
            '<A href='''+ dbo.ufDomainName()+Link +''' >'+ CateName +'</A>' ASCateName,  
            TB_Category.Decen, 
            TB_Category.Depth,
            TB_Category.Link, 
            TB_Category.CssClass
            FROM   TB_Category 
            WHERE TB_Category.Decen=0  ORDER BY TB_Category.Depth
END
ELSE
-- Nếu @TabID>0 thì hiển thị các cấp phụ thuộc vào @CateID
BEGIN
      -- Nếu @CateID=0 thì hiển thị đến Menu cấp 2
      IF @CateID=0
            BEGIN
                  SELECT
                  TB_Category.CateID, TB_Category.ParentID, 
                  '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName,
                  TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass                   FROM         TB_Category
                  WHERE TB_Category.Decen=AND ParentID=@TabID
                  UNION
                  SELECT
                  TB_Category.CateID, TB_Category.ParentID, 
                  '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName,
                  TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM  TB_Category 
                  WHERE TB_Category.Decen=AND TB_Category.ParentID=@TabID
                  UNION
                  SELECT TB_Category.CateID, TB_Category.ParentID, 
                        '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName,
                        TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass 
                  FROM  TB_Category  
                  WHERE TB_Category.Decen=AND TB_Category.CateID<>@TabID 
                  ORDER BY TB_Category.Depth
            END
      ELSE
            -- Ngược lại @CateID>0 hiển thị đến Menu cấp 3
            BEGIN
                  SELECT TB_Category.CateID, TB_Category.ParentID, 
                  '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName,
                  TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass 
                  FROM TB_Category  
                  WHERE TB_Category.Decen=AND TB_Category.CateID=@TabID
                  UNION
                  SELECT TB_Category.CateID, TB_Category.ParentID, 
                  '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName,
                  TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass 
                  FROM  TB_Category 
                  WHERE TB_Category.Decen=AND TB_Category.ParentID=@TabID
                  UNION 
                        SELECT TB_Category.CateID, TB_Category.ParentID, 
                        '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName, 
                        TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass
                        FROM  TB_Category 
                        WHERE TB_Category.Decen=AND TB_Category.ParentID=@CateID
                  UNION
                   SELECT TB_Category.CateID, TB_Category.ParentID, 
                   '<A href='''+ dbo.ufDomainName()+Link +''' class='''+CssClass+'''>'+CateName +'</A>' AS CateName,
                   TB_Category.Decen, TB_Category.Depth, TB_Category.Link,TB_Category.CssClass FROM TB_Category 
                  WHERE  TB_Category.Decen=AND TB_Category.CateID<>@TabID 
                  ORDER BY TB_Category.Depth
            END
END
 Bạn hãy chạy thử với câu lệnh sau EXEC spTB_Category_LeftMenu 5,9  --> khi đó kết quả sẽ được hiển thị như bảng sau
Trong kết quả trên bạn thấy trong trường CateName có đầy đủ cả liên kết và class đã được định nghĩa trong Bảng TB_Category như những bài trước đã viết (Trường ClassName theo cấp menu được sinh tự động bằng spTB_Categoey_Edit). Trong code bạn chỉ cần viết các ClassName trong css để hiển thị cho phù hợp. Trường Link của bạn nếu có sẽ hiển thị trong trường CateName ví dụ với CateID=5 có Link=?Tab=5 khi đó trường CateName trong store trên sẽ như sau:
<A href='http://www.hmweb.com.vn?Tab=5' class='MenuLevel_1'>Thể thao</A>

3. Thủ tục GetSubTree
Tiếp theo là thủ tục để hiển thị tất cả các phần tử là con của một cấp menu. Bạn viết Procedure như sau:
-- =============================================
-- Author:        webmaster@hmweb.com.vn
-- Description:   <GetSubTree>
-- =============================================
CREATE PROCEDURE [dbo].[spTB_Category_GetSubTree]
@CateID int
AS
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 ParentID=@CateID
      ORDER BY Depth  
END
 Vậy là đã có các thủ tục cơ bản của bảng Category. Website của bạn có thể có những yêu cầu khác, bạn có thể viết thêm các thủ tục theo yêu cầu. Tiếp theo chúng ta sẽ viết các hàm và procedure cho bảng TB_News

Nguồn bài viết: hmweb

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML