nopCommerce分页算法(sql server 存储过程)

ContractedBlock.gif ExpandedBlockStart.gif Code
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[Nop_ProductSearch] 
    
@Keywords        NVARCHAR(MAX),    
    
@SearchDescriptions bit = 0,
    
@PageNumber        INT = 1,
    
@PageSize        INT = 20,    
    
@ShowHidden bit = 0,
    
@TotalProducts INT OUTPUT

AS
BEGIN
    
SET NOCOUNT ON

    
IF @PageSize is null or @PageSize = 0
        
SET @PageSize = 20

    
SET @Keywords = '%' + rtrim(ltrim(@Keywords)) + '%'

    
CREATE TABLE #ProductFilter
    (
        ProductFilterID 
int IDENTITY (11NOT NULL,
        ProductID 
int not null
    )

    
IF ((@Keywords IS NOT NULLAND (LEN(@Keywords> 0))
        
BEGIN
            
            
INSERT #ProductFilter (ProductID)
            
SELECT distinct p.ProductID
            
FROM 
                Nop_Product p 
with (NOLOCK)
                
left join Nop_ProductVariant pv    with (NOLOCK) ON p.ProductID = pv.ProductID            
            
WHERE 
                 (
                      
patindex(@Keywordsisnull(p.name, '')) > 0
                      
or patindex(@Keywordsisnull(pv.name, '')) > 0
                      
or patindex(@Keywordsisnull(pv.sku , '')) > 0
                      
or (@SearchDescriptions = 1 and patindex(@Keywordsisnull(p.ShortDescription, '')) > 0)
                      
or (@SearchDescriptions = 1 and patindex(@Keywordsisnull(p.FullDescription, '')) > 0)
                      
or (@SearchDescriptions = 1 and patindex(@Keywordsisnull(pv.Description, '')) > 0)
                  )
              
and (p.Published = 1 or @ShowHidden = 1)
              
and (pv.Published = 1 or @ShowHidden = 1)
              
and p.Deleted = 0
              
and pv.Deleted = 0
        
END    

    
SELECT    @TotalProducts = COUNT(ProductID)
    
FROM    #ProductFilter

    
DECLARE @FirstRec int@LastRec int
    
SELECT @FirstRec = (@PageNumber-1* @PageSize
    
SELECT @LastRec = (@PageNumber * @PageSize + 1)

    
SELECT p.*
    
FROM 
        Nop_Product p 
with (NOLOCK)
        
inner join #ProductFilter pf    with (NOLOCK) ON p.ProductID = pf.ProductID
    
WHERE pf.ProductFilterID > @FirstRec AND pf.ProductFilterID < @LastRec
    
ORDER BY p.Name
    
DROP TABLE #ProductFilter
END

转载于:https://www.cnblogs.com/joe-yang/archive/2009/04/17/1438170.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值