zoukankan      html  css  js  c++  java
  • 全文索引工作收集

    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO

    --通过歌名进行全文索引-搜索歌曲
    --
    xiaopin
    --
    2011-08-15
    ALTER     procedure p_show_infokey_bysongname
    @key varchar(128='',
    @page int = 1,
    @pagesize int = 10,
    @total int = -1 output
    as

    set nocount on
    set transaction isolation level read uncommitted
    set xact_abort on

    set @key=rtrim(ltrim(@key))

    declare @upperbound int
    declare @lowerbound int
    declare @sql nvarchar(2048)
    declare @where nvarchar(2048)
    declare @searchid int
    declare @searchkey varchar(256)
    declare @searchcount int

    set @upperbound = @pagesize * @page
    set @lowerbound = @pagesize * ( @page - 1 )

    set @searchid=isnull((select searchid from t_search where searchkey=''+@key+''),0)

    if @searchid=0
    begin
        
    insert into t_search(searchkey)values(@key)
        
    set @searchid=@@identity

        
    set @searchkey = '"*' + @key + '*"'
        
    insert into t_search_index(searchid,infoid,sizeid,userid,totaldown,normid) select top 1500 @searchid,infoid,sizeid,userid,totaldown,normid from t_info where contains(title,@searchkeyorder by infoid desc
    end

    if @total <= 0
    begin
        
    set @searchcount=isnull((select count(1from t_search_index where searchid = @searchid),0)

        
    if@searchcount = 0)
        
    begin
            
    delete from t_search where searchid = @searchid
            
    delete from t_search_index where searchid = @searchid
        
    end
    end

    set @where=' where searchid='+convert(varchar,@searchid)

    exec P_SplitPageOneSql_search 't_search_index',@pagesize,@page,'b.totaldown desc,b.rid asc','b.totaldown asc,b.rid desc','b.totaldown,b.rid','rid',1,@where,'a.infoid',@total output

    GO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO

    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_NULLS ON
    GO

    ALTER                               procedure P_SplitPageOneSql_search  
    @tablename varchar(32),  
    @pagesize int,   --页面大小  
    @pagepos int,   --第几页  
    @orderby  varchar(64),    --排序顺序,多个则用","分隔 加上前缀b.  
    @orderby2 varchar(64),   --排序顺序的反向排序,多个则用","分隔 加上前缀b.  
    @orderbyclause varchar(64), --排序字段(不包括desc ,asc等),以","分隔  加上前缀b.  
    @keyname varchar(32),   --主键  
    @keyinorder tinyint ,       --主键是否在排序字段中 1:在  0:不在  
    @whereclause varchar(1024) , --where条件  
    @showclause varchar(1024),  --显示的字段 加上前缀a.  --注意如果显示字段过长的话,需要再加长  
    @totalcount int output  --是否需要统计总数 -1:要统计 其它不统计  
    as  
     
    set nocount on  
    set transaction isolation level read uncommitted  
    declare @sql nvarchar(1024) --注意如果显示字段过长的话,需要再加长  
    declare @showrows smallint  --显示的行数(可能在最后一页,这样显示的记录数就要小于@pagesize  
    declare @top9clause nvarchar(1024)  
    if @keyinorder = 0  
        set @top9clause = @orderbyclause + ',b.' + @keyname  
    else  
        set @top9clause = @orderbyclause   
    if @whereclause is null  
        set @whereclause = ''  
     
    if @totalcount <= 0  
    begin  
        set @sql = 'set @totalcount = (select count(1) from ' + @tablename + ' ' + @whereclause +')'  
        exec sp_executesql @sql,N'@totalcount int output',@totalcount output  
    end  
     
    --要处理好翻到最后一页且不能满页时的情况  
    if @totalcount > @pagesize * (@pagepos -1) and @totalcount < @pagesize * @pagepos   
       set @showrows = @totalcount - @pagesize * (@pagepos -1)  
    else if  @totalcount >= @pagesize * @pagepos   
       set @showrows = @pagesize  
    else  
       return   
     
    set @sql = 'select '   +   @showclause +',other.* from (  
    select top  ' + convert(varchar, @showrows)  + '  ' + @top9clause +  ' from(  
    select top ' + convert(varchar,@pagesize * @pagepos) + ' '   
     + @top9clause +  '  from  
      ' + @tablename  + '  b ' +  @whereclause  +' order by ' + @orderby + ') b   
    order by  '  + @orderby2 + ') b inner join ' + @tablename  + '  a on a.' + @keyname +' = b.' + @keyname +'   
     inner join t_info other on a.infoid = other.infoid  
    order by ' + @orderby  
     
    exec sp_executesql @sql 

    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    SET ANSI_NULLS ON
    GO
     

    专注iOS、Android、Java、Golang开发等涉及开发管理相关。 技术博客:http://xiaopin.cnblogs.com
  • 相关阅读:
    Codeforces 22E(图论)
    Codeforces Educational Round 23
    bzoj1444 有趣的游戏(AC自动机+概率dp)
    AtCoder Grand Contest 012 D Colorful Balls
    计蒜客15430 XOR Queries(Trie处理位运算问题)
    AtCoder Grand Contest 012 B Splatter Painting(记忆化搜索)
    Codeforces 799E(贪心)
    Codeforces Round #414
    Codeforces Educational Round 21
    LOJ10078
  • 原文地址:https://www.cnblogs.com/xiaopin/p/2163455.html
Copyright © 2011-2022 走看看