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

Một số ví dụ về Trigger

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 Một số ví dụ về Trigger on Tue Sep 28, 2010 2:14 am

Admin


Admin
1. Trigger để cập nhật tự động trường Link cho bài viết
Để tự động cập nhật trường liên kết cho bài viết bạn có thể thực hiện như Trigger sau

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



CREATE TRIGGER [dbo].[TB_News_InsertTrigger]

ON [dbo].TB_News

FOR INSERT AS



DECLARE @Link nvarchar(100)

DECLARE @NewID int

DECLARE @CateID int

SELECT @CateID = (SELECT CateID FROM Inserted)

SELECT @Link=Link FROM TB_Category WHERE CateID =@CateID

SELECT @NewID=(Select idNews from Inserted)

SET @Link=@Link+'&NewsID='+Cast(@NewID AS nvarchar(20))

--Cập nhật trường liên kết cho bài viết

UPDATE TB_News SET Link=@Link

WHERE idNews=(Select idNews from Inserted)
2. Store procedure Truy vấn danh sách bài viết
Bài viết có thể ở 1 trong 2 trạng thái đã đăng hoặc chưa đăng (Ở đây mình phân tích chỉ 2 trạng thái, nếu ứng dụng của bạn có yêu cầu phân quyền nhiều cấp như trạng thái chờ đăng, trạng thái chờ duyệt, trạng thái đăng ... thì bạn sửa lại cho phù hợp). Trong store procedure sau tùy theo @Action đề lấy bài viết theo trạng thái tương ứng:
- Nếu @Action=0 thì truy vấn tất cả - cả đã đăng và chờ đăng
- Nếu @Action=1 thì truy vấn các bài đã đăng
- Nếu @Action=-1 thì truy vẫn các bài chờ đăng.
Khi sử dụng store này tùy vào yêu cầu mà bạn Set giá trị của @Action

-- =============================================

-- Author: [You must be registered and logged in to see this link.]

-- Description: <Truy vấn bài viết>

-- =============================================

CREATE PROCEDURE [dbo].[spRB_News_Select]

@Action int,

@idNews int

AS

BEGIN

-- Nếu @Action=1 => truy vấn bài viết có trạng thái đã đăng

IF @Action=1

BEGIN

-- Nếu @idNews=0 => truy vấn hết các bài đã đăng

IF @Action=0

BEGIN

SELECT

TB_Category.CateID,

TB_Category.ParentID,

TB_Category.CateName,

TB_News.idNews,

TB_News.UserName,

TB_News.Title,

TB_News.Description,

TB_News.Content,

TB_News.Author,

TB_News.Picture,

-- Chuyển thời gian thành dd/MM/yyyy

CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,

CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,

CASE TB_News.Status

WHEN 1 THEN N'Đã đăng'

WHEN 0 THEN N'Chưa đăng' END AS Status,

TB_News.Numberreads,

TB_News.Link,

TB_Category.Decen,

TB_Category.Depth

FROM TB_Category INNER JOIN

TB_News ON TB_Category.CateID = TB_News.CateID

WHERE TB_News.Status=1

END

ELSE

--Nếu @idNew>0 => Truy vấn bài viết đã đăng theo idNews

BEGIN

-- Cập nhật số lần xem bài viết

DECLARE @Numberreads int

SET @Numberreads=0

SELECT @Numberreads=Numberreads FROM TB_News WHERE idNews=@idNews

UPDATE TB_News

SET

Numberreads =@Numberreads +1

WHERE idNews=@idNews

-- Nếu cập nhật thành công => Select

IF @@ERROR=0

SELECT

TB_Category.CateID,

TB_Category.ParentID,

TB_Category.CateName,

TB_News.idNews,

TB_News.UserName,

TB_News.Title,

TB_News.Description,

TB_News.Content,

TB_News.Author,

TB_News.Picture,

-- Chuyển thời gian thành dd/MM/yyyy

CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,

CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,

CASE TB_News.Status

WHEN 1 THEN N'Đã đăng'

WHEN 0 THEN N'Chưa đăng' END AS Status,

TB_News.Numberreads,

TB_News.Link,

TB_Category.Decen,

TB_Category.Depth

FROM TB_Category INNER JOIN

TB_News ON TB_Category.CateID = TB_News.CateID

WHERE TB_News.Status=1 AND TB_News.idNews=@idNews

END

END



-- Nếu @Action=-1 => truy vấn bài viết có trạng thái chưa đăng

IF @Action=-1

BEGIN

-- Nếu @idNews=0 => truy vấn hết các bài chưa đăng

IF @Action=0

BEGIN

SELECT

TB_Category.CateID,

TB_Category.ParentID,

TB_Category.CateName,

TB_News.idNews,

TB_News.UserName,

TB_News.Title,

TB_News.Description,

TB_News.Content,

TB_News.Author,

TB_News.Picture,

-- Chuyển thời gian thành dd/MM/yyyy

CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,

CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,

CASE TB_News.Status

WHEN 1 THEN N'Đã đăng'

WHEN 0 THEN N'Chưa đăng' END AS Status,

TB_News.Numberreads,

TB_News.Link,

TB_Category.Decen,

TB_Category.Depth

FROM TB_Category INNER JOIN

TB_News ON TB_Category.CateID = TB_News.CateID

WHERE TB_News.Status=0

END

ELSE

--Nếu @idNew>0 => Truy vấn bài viết chưa đăng theo idNews

BEGIN

SELECT

TB_Category.CateID,

TB_Category.ParentID,

TB_Category.CateName,

TB_News.idNews,

TB_News.UserName,

TB_News.Title,

TB_News.Description,

TB_News.Content,

TB_News.Author,

TB_News.Picture,

-- Chuyển thời gian thành dd/MM/yyyy

CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,

CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,

CASE TB_News.Status

WHEN 1 THEN N'Đã đăng'

WHEN 0 THEN N'Chưa đăng' END AS Status,

TB_News.Numberreads,

TB_News.Link,

TB_Category.Decen,

TB_Category.Depth

FROM TB_Category INNER JOIN

TB_News ON TB_Category.CateID = TB_News.CateID

WHERE TB_News.Status=0 AND TB_News.idNews=@idNews

END

END



-- Nếu @Action=0 => truy vấn All (Cả trạng thái đã đăng và chưa đăng)

IF @Action=0

BEGIN

-- Nếu @idNews=0 => truy vấn hết các bài chưa đăng

IF @Action=0

BEGIN

SELECT

TB_Category.CateID,

TB_Category.ParentID,

TB_Category.CateName,

TB_News.idNews,

TB_News.UserName,

TB_News.Title,

TB_News.Description,

TB_News.Content,

TB_News.Author,

TB_News.Picture,

-- Chuyển thời gian thành dd/MM/yyyy

CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,

CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,

CASE TB_News.Status

WHEN 1 THEN N'Đã đăng'

WHEN 0 THEN N'Chưa đăng' END AS Status,

TB_News.Numberreads,

TB_News.Link,

TB_Category.Decen,

TB_Category.Depth

FROM TB_Category INNER JOIN

TB_News ON TB_Category.CateID = TB_News.CateID



END

ELSE

--Nếu @idNew>0 => Truy vấn bài viết chưa đăng theo idNews

BEGIN

SELECT

TB_Category.CateID,

TB_Category.ParentID,

TB_Category.CateName,

TB_News.idNews,

TB_News.UserName,

TB_News.Title,

TB_News.Description,

TB_News.Content,

TB_News.Author,

TB_News.Picture,

-- Chuyển thời gian thành dd/MM/yyyy

CONVERT(nvarchar(30),TB_News.CreateDate,103) AS CreateDate,

CONVERT(nvarchar(30),TB_News.PublishDate,103) AS PublishDate,

CASE TB_News.Status

WHEN 1 THEN N'Đã đăng'

WHEN 0 THEN N'Chưa đăng' END AS Status,

TB_News.Numberreads,

TB_News.Link,

TB_Category.Decen,

TB_Category.Depth

FROM TB_Category INNER JOIN

TB_News ON TB_Category.CateID = TB_News.CateID

WHERE TB_News.idNews=@idNews

END

END

END

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