asp和存储过程中搜索程序的代码实现

存储进程比较复杂复杂,但是可以支持多种逻辑字符,我们可以选择在该表中搜索并优化存储过程的速度,那么asp和存储过程中搜索程序的代码实现大家都了解吗?下面就让中国E盟技术频道小编带你一起来了解一下吧!
asp函数

复制代码 代码如下:

functionAnalyseKeyword(a_strSource)
dimm_strDest,m_intLoop
dimm_intBeginPos,m_intEndPos
dimm_strHead,m_strMiddle,m_strTail
m_strDest=a_strSource

'------------------------------处理空格------------------------------------------------------

'首先去掉头尾空格
m_strDest=ltrim(rtrim(m_strDest))

'将&,"and"等替换成+、-、空格
m_strDest=replace(m_strDest,"&","+")
m_strDest=replace(m_strDest,"AND","+")
m_strDest=replace(m_strDest,"OR",chr(32))
m_strDest=replace(m_strDest,"NOT","-")

'初始化变量,以使下面的循环进行
m_intBeginPos=1

dowhilem_intBeginPos<>0
m_intBeginPos=instr(m_strDest,chr(32))
ifm_intBeginPos<>0then'如果找到空格
m_strHead=rtrim(ltrim(left(m_strDest,m_intBeginPos)))
callprint("[AnalyseKeyword()]:处理空格m_strHead="+m_strHead)
m_strTail=rtrim(ltrim(right(m_strDest,len(m_strDest)-m_intBeginPos)))
callprint("[AnalyseKeyword()]:处理空格m_strTail="+m_strTail)
m_strDest=m_strHead+"*"+m_strTail
else
exitdo
endif
loop
m_strDest=replace(m_strDest,"*",chr(32))
callprint("[AnalyseKeyword()]:处理空格完毕后m_strDest="+m_strDest)
'-------------------------------空格处理完毕-------------------------------------------------

'-------------------处理单双引号-----------------------------------------------------

'首先将单引号替换为双引号
m_strDest=replace(m_strDest,chr(39),chr(34))

'置一个初值以使循环进行
m_intBeginPos=1
m_intEndPos=1
m_strHead=""
m_strTail=""
dowhilem_intBeginPos<>0andm_intEndPos<>0
'如果发现双引号,则记下开始位置,查找下一个双引号
m_intBeginPos=instr(m_strDest,chr(34))
ifm_intBeginPos<>0then'如果找到第一个引号

callprint("[AnalyseKeyword()]:第一个引号出现的位置:"+cstr(m_intBeginPos))

m_intEndPos=instr(m_intBeginPos+1,m_strDest,chr(34))
ifm_intEndPos<>0then'如果找到第二个引号

callprint("[AnalyseKeyword()]:第二个引号出现的位置:"+cstr(m_intEndPos))

'将整个字符串按引号分隔成三段
callprint("[AnalyseKeyword()]:处理引号m_strDest="+m_strDest)
m_strHead=left(m_strDest,m_intBeginPos-1)
callprint("[AnalyseKeyword()]:处理引号m_strHead="+m_strHead)
m_strMiddle=mid(m_strDest,m_intBeginPos+1,m_intEndPos-m_intBeginPos-1)
callprint("[AnalyseKeyword()]:处理引号m_strMiddle="+m_strMiddle)
m_strTail=right(m_strDest,len(m_strDest)-m_intEndPos)
callprint("[AnalyseKeyword()]:m_strTail="+m_strTail)

'如果在引号中有+号则作为字符处理,暂时替换成其他字符
m_strMiddle=replace(m_strMiddle,"+","|")
m_strDest=m_strHead+replace(rtrim(ltrim(m_strMiddle)),chr(32),"#")+m_strTail

else
exitdo
endif
else
exitdo
endif
loop
m_strDest=replace(m_strDest,chr(34),"+")
callprint("[AnalyseKeyword()]:处理引号完毕后m_strDest="+m_strDest)

'-------------------------------引号处理完毕-------------------------------------------------

'-------------------------------处理多个加号及加号两边的空格问题-----------------------------


'处理多个加号的问题,遇到多个加号则认为是字符串,而不是逻辑符
m_strDest=replace(m_strDest,"+++","|||")
m_strDest=replace(m_strDest,"++","||")
callprint("[AnalyseKeyword()]:处理多个减号完毕后m_strDest='"+m_strDest+"'")

'处理加号两边的空格
m_strDest=replace(m_strDest,"+","+")
m_strDest=replace(m_strDest,"+","+")
m_strDest=replace(m_strDest,"+","+")
callprint("[AnalyseKeyword()]:处理减号两边的空格完毕后m_strDest='"+m_strDest+"'")

'-------------------------------处理加号完毕-----------------------------

'-------------------------------处理多个减号及减号两边的空格问题-----------------------------


'处理多个减号的问题,遇到多个减号则认为是字符串,而不是逻辑符
m_strDest=replace(m_strDest,"---","~~~")
m_strDest=replace(m_strDest,"--","~~")

callprint("[AnalyseKeyword()]:处理多个减号完毕后m_strDest='"+m_strDest+"'")

'处理减号两边的空格
m_strDest=replace(m_strDest,"-","-")
m_strDest=replace(m_strDest,"-","-")
m_strDest=replace(m_strDest,"-","-")
callprint("[AnalyseKeyword()]:处理加号两边的空格完毕后m_strDest='"+m_strDest+"'")

'-------------------------------处理减号完毕-----------------------------

'------------------------------处理字符串两头的加减号问题-----------------
iflen(m_strDest)>=3then
m_strHead=left(m_strDest,1)
m_strMiddle=mid(m_strDest,2,len(m_strDest)-2)
m_strTail=right(m_strDest,1)
ifm_strHead="+"orm_strHead="-"then
m_strHead=""
endif
ifm_strTail="+"orm_strTail="-"then
m_strTail=""
endif
m_strDest=m_strHead+m_strMiddle+m_strTail
endif
'----------------------------处理完毕-------------------------------------
m_strDest=replace(m_strDest,"--","~~")
m_strDest=replace(m_strDest,"++","||")
m_strDest=replace(m_strDest,chr(32),"@")
AnalyseKeyword=m_strDest
callprint("[AnalyseKeyword()]:全部处理完毕后m_strDest='"+m_strDest+"'")

endfunction
%>


存储过程
/*********************************************************************/
/*procname:Up_ParseWordSearch*/
/**/
/*Description:关键字搜索*/
/**/
/*parameters:@a_strCategoryID分类id*/
/*@a_intPosition调用的位置*/
/*@a_strParseWord搜索关键字*/
/*@a_intRowCount限定最多取得记录数*/
/**/
/*date:2000/6/28*/
/**/
/*author:Liuyunpeng*/
/**/
/*history:*/
/*********************************************************************/

ifexists(select*fromsysobjectswhereid=object_id("up_ParseWordSearch"))
dropprocup_ParseWordSearch
go

createprocup_ParseWordSearch@a_strParsewordvarchar(255),
@a_strCategoryIDvarchar(255),
@a_intPositiontinyint,
@a_intRowCountint
as
declare@m_strSqlConditionvarchar(255)--Sql语句的条件部分
declare@m_strSqlSelectvarchar(255)--Sql语句的选择部分
declare@m_strSqlCategoryvarchar(100)--sql语句的分类部分

/*根据调用位置决定sql的选择部分*/
select@m_strSqlSelect
=case
when@a_intPosition=4then--商品库
"selectProductID,'Title'=ProductName,'Description'=left(Description,100)"
+"fromProductwhere"
when@a_intPosition=5then--商业机会库
"selectID,Title,'Description'=left(convert(varchar,content),100)"
+"fromBusinessChancewhere"
when@a_intPosition=6then--公司库
"selectCompanyID,'Title'=CompanyName,'Description'=left(Description,100)"
+"fromCompanywhere"
end

/*根据分类ID决定sql的分类部分*/
select@m_strSqlCategory
=case
when@a_strCategoryID<>"0"then"CategoryIDlike'"+@a_strCategoryID+"%'and"
else""
end

/*根据调用位置决定sql的条件部分*/
select@m_strSqlCondition
=case
when@a_intPosition=4--商品
then"(ProductNamelike'%"+@a_strParseWord+"%'"
+"orDescriptionlike'%"+@a_strParseWord+"%'"
+"orProducerNamelike'%"+@a_strParseWord+"%')"
when@a_intPosition=5--商业机会
then"(Titlelike'%"+@a_strParseWord+"%'"
+"orKeywordlike'%"+@a_strParseWord+"%')"
when@a_intPosition=6
then"(CompanyNamelike'%"+@a_strParseWord+"%'"
+"orDescription'%"+@a_strParseWord+"%')"
end

setrowcount@a_intRowCount
exec(@m_strSqlSelect+@m_strSqlCategory+@m_strSqlCondition)
setrowcount0
go

上文是asp和存储过程中搜索程序的代码实现,相信大家都有了一定的了解,想要了解更多的技术信息,请继续关注中国E盟技术频道吧!