• λ我爱Aspx >> C#.Net >> 在SQL Server 2005中用存储过程实现搜索功能_数据库技巧
  • 在SQL Server 2005中用存储过程实现搜索功能_数据库技巧

  • :aspxer  Դ:internet  :2007-4-28 23:44:41  ؼ:sql,数据库,数据
  • 现在很多网站都提供了站内的搜索功能,有的很简单在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,它用了一个很高效的方法来计算关键词出现的次数。

    Ҷƪл˵?
  • һƪ分页存储过程2000_数据库技巧
    һƪASP调用带参数存储过程的几种方式_ASP技巧