在SQL Server 2005中用存储过程实现搜索功能
现在很多网站都提供了站内的搜索功能,有的很简单在SQL语句里加一个条件如:where names like ‘%words%’就可以实现最基本的搜索了。
我们来看看功能强大一点,复杂一点的搜索是如何实现的(在SQL SERVER200/2005通过存储过程实现搜索算法)。
我们把用户的搜索可以分为以下两种:
1.精确搜索,就是把用户输入的各个词语当成一个整体,不分割搜索.
2.像百度,GOOGLE一样的,按空格把输入的每一个词分离,只要包含这些词语,而不管出现的顺序,称为ALL-Word Search.
3.对输入的词只要有一个出现就为匹配 称为Any-Word Search
一、对搜索结果进行排序的算法
在前面提到的LIKE语句最大的问题就是搜索的结果是没有经过排序的,我们不知道结果出现在的顺序是如何的,因为它是随机的。像百度,GOOGLE都会对
结果用算法进行排序再显示的.好我们也来建立一个简单的排序法。一个很常见的算法是计算关键词在被搜索内容中出现的次数,次数最多的排在结果的第一位。我
们的是在存储过程中实现这个算法的,而在SQLSERVER中没有提供计算关键词在被搜索内容中出现的次数这样的函数,我们要自己写一个UDF(User
-Defined Functions),UDF是SQLSERVER的内部函数,可以被存储过程调用或者被其他UDF调用。函数如下:
1CREATE FUNCTION dbo.WordCount
2
3(@Word VARCHAR(15),
4
5 @Phrase VARCHAR(1000))
6
7RETURNS SMALLINT
8
9AS
10
11BEGIN
12
13/**//* 如果@Word 或者@Phrase 为空返回 0 */
14
15IF @Word IS NULL OR @Phrase IS NULL RETURN 0
16
17/**//* @BiggerWord 比@Word长一个字符 */
18
19DECLARE @BiggerWord VARCHAR(21)
20
21SELECT @BiggerWord = @Word + 'x'
22
23/**//*在 @Phrase用@BiggerWord替换@Word */
24
25DECLARE @BiggerPhrase VARCHAR(2000)
26
27SELECT @BiggerPhrase = REPLACE (@Phrase, @Word, @BiggerWord)
28
29/**//* 相减结果就是出现的次数了 */
30
31RETURN LEN(@BiggerPhrase) - LEN(@Phrase)
32
33END
34
以上就是整个UDF,它用了一个很高效的方法来计算关键词出现的次数。
二、参数传递
用户输入的关键词从一个到多个不等,我们可以把参数固定为@word1~@word5,这样比较方面实现。当用户输入超过5个时,忽略不计,少于5个的
相关文档:
Sql Server2005的一个新特性便是我等了很久的Row_Number(),以前用Oracle时用rownumber写分页存储过程很方便:)
下面是我做的一个小小的测试,测试我原来在sql server2000下所用的分页存储过程与使用Row_Number()编写的存储过程在Sql Server2005上的执行效率...
数据表:
REATE TABLE [dbo].[test](
[UserId] [int] Pri ......
1、 用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用 ......
for ACCESS :
update a, b set a.name=b.name1 where a.id=b.id
for SQL Server:
"update a set a.name=b.name1 from a,b where a.id=b.id"
update a set a.status=b.status
from table1 a,table2 b
&nbs ......
今天忽然ms sql2000的企业管理器出错,搜索了一下找到了解决办法,记录一下,方便日后查询
错误信息:
---------------------------
Microsoft Management Console
---------------------------
MMC 不能打开文件 C:\Program Files\Microsoft SQL Server\80\Tools\BINN\SQL Server Enterprise Manager.MSC。
这可能是 ......
SQL位运算
select 2|8 --10
select 2|8|1 --11
select 10&8 --8,包含,10=8+2
select 10&2 --2,包含,10=2+8
select 10&4 --0,不包含
select 19&16 --16,包含,19=16+2+1
s ......