全文索引工作收集
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,@searchkey) order by infoid desc
end
if @total <= 0
begin
set @searchcount=isnull((select count(1) from 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
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,@searchkey) order by infoid desc
end
if @total <= 0
begin
set @searchcount=isnull((select count(1) from 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
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、Golang开发。
技术博客:http://xiaopin.cnblogs.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2010-09-02 110个Oracle常用函数整理汇总