MSSQL 全文搜索 指定字符串

平时在在MSSql中查询数据的时候,想查找,某个字段在数据库中是否存在,并且查询出在哪个表中,哪个字段下面,在不知道的情况下,操作起来会很麻烦,然后就尝试些了一个sql语句,使用起来感觉挺方便的。当然了,也可以做成存储过程,来使用。

--一般查询

DECLARE @string VARCHAR(max)

SET @string=‘七岁童年‘--要查询的字符串

DECLARE @tbname VARCHAR(50)
DECLARE tbroy CURSOR FOR
  SELECT name
  FROM   sysobjects
  WHERE  xtype = ‘u ‘ --遍历所有的表

OPEN tbroy

FETCH next FROM tbroy INTO @tbname

--创建临时表
IF Object_id(‘Tempdb..#temp_table‘) IS NOT NULL
  DROP TABLE #temp_table

CREATE TABLE #temp_table
  (
     ID      INT IDENTITY(1, 1),
     tbname  VARCHAR(max),--表名
     colname VARCHAR(max)--字段名
  )

WHILE @@fetch_status = 0
  BEGIN
      DECLARE @colname VARCHAR(50)
      DECLARE colroy CURSOR FOR
        SELECT name
        FROM   syscolumns
        WHERE  id = Object_id(@tbname)
               AND xtype IN (SELECT xtype
                             FROM   systypes
                             WHERE  name IN ( ‘varchar ‘, ‘nvarchar ‘, ‘char ‘, ‘nchar ‘ ) --数据类型为字符型的字段
                            ) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段

      OPEN colroy

      FETCH next FROM colroy INTO @colname

      WHILE @@fetch_status = 0
        BEGIN
            DECLARE @sql NVARCHAR(1000),
                    @j   INT

            SELECT @sql = ‘select @i=count(1) from ‘ + @tbname
                          + ‘ where ‘ + @colname + ‘ like ‘ + ‘‘‘%‘ + @string
                          + ‘%‘‘‘

            EXEC Sp_executesql
              @sql,
              N‘@i int output‘,
              @i=@j output --输出满足条件表的记录数
            IF @j > 0
              BEGIN
                  INSERT INTO #temp_table
                  SELECT @tbname,
                         @colname
              --exec( ‘select distinct ‘[email protected]+‘ from ‘ [email protected] + ‘ where ‘+ @colname+ ‘ like ‘+ ‘‘‘%‘[email protected]+ ‘%‘‘‘)
              END

            FETCH next FROM colroy INTO @colname
        END

      CLOSE colroy

      DEALLOCATE colroy

      FETCH next FROM tbroy INTO @tbname
  END

CLOSE tbroy

DEALLOCATE tbroy

SELECT id, tbname as ‘表名‘, colname as ‘字段名‘FROM   #temp_table

IF Object_id(‘Tempdb..#temp_table‘) IS NOT NULL--删除临时表
  DROP TABLE #temp_table
go
--存储过程实现
--创建存储过程
CREATE PROC Search (@string NVARCHAR(max))
AS
  BEGIN
      DECLARE @tbname VARCHAR(50)
      DECLARE tbroy CURSOR FOR
        SELECT name
        FROM   sysobjects
        WHERE  xtype = ‘u ‘ --遍历所有的表
      OPEN tbroy

      FETCH next FROM tbroy INTO @tbname

      --创建临时表
      IF Object_id(‘Tempdb..#temp_table‘) IS NOT NULL
        DROP TABLE #temp_table

      CREATE TABLE #temp_table
        (
           ID      INT IDENTITY(1, 1),
           tbname  VARCHAR(max),--表名
           colname VARCHAR(max)--字段名
        )

      WHILE @@fetch_status = 0
        BEGIN
            DECLARE @colname VARCHAR(50)
            DECLARE colroy CURSOR FOR
              SELECT name
              FROM   syscolumns
              WHERE  id = Object_id(@tbname)
                     AND xtype IN (SELECT xtype
                                   FROM   systypes
                                   WHERE  name IN ( ‘varchar ‘, ‘nvarchar ‘, ‘char ‘, ‘nchar ‘ ) --数据类型为字符型的字段
                                  ) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段
            OPEN colroy

            FETCH next FROM colroy INTO @colname

            WHILE @@fetch_status = 0
              BEGIN
                  DECLARE @sql NVARCHAR(1000),
                          @j   INT

                  SELECT @sql = ‘select @i=count(1) from ‘ + @tbname
                                + ‘ where ‘ + @colname + ‘ like ‘ + ‘‘‘%‘ + @string
                                + ‘%‘‘‘

                  EXEC Sp_executesql
                    @sql,
                    N‘@i int output‘,
                    @i=@j output --输出满足条件表的记录数

                  IF @j > 0
                    BEGIN
                        INSERT INTO #temp_table
                        SELECT @tbname,
                               @colname
                    --exec( ‘select distinct ‘[email protected]+‘ from ‘ [email protected] + ‘ where ‘+ @colname+ ‘ like ‘+ ‘‘‘%‘[email protected]+ ‘%‘‘‘)
                    END

                  FETCH next FROM colroy INTO @colname
              END

            CLOSE colroy

            DEALLOCATE colroy

            FETCH next FROM tbroy INTO @tbname
        END

      CLOSE tbroy

      DEALLOCATE tbroy

      SELECT id,
             tbname  AS ‘表名‘,
             colname AS ‘字段名‘
      FROM   #temp_table

      IF Object_id(‘Tempdb..#temp_table‘) IS NOT NULL--删除临时表
        DROP TABLE #temp_table
  END

go

--使用方法
EXEC Search ‘七岁童年‘
 
时间: 2024-10-19 13:17:47

MSSQL 全文搜索 指定字符串的相关文章

文件夹搜索指定字符串软件

原文:文件夹搜索指定字符串软件 源代码下载地址:http://www.zuidaima.com/share/1554706879384576.htm 本程序主要功能是:找出指定文件夹中所有包含指定制字符串的文件.

搜索指定字符串地址

- (void)viewDidLoad { [super viewDidLoad]; self.geocoder = [[CLGeocoder alloc]init]; // 设置地图可缩放 self.mapView.zoomEnabled = YES; // 设置地图可滚动 self.mapView.scrollEnabled = YES; // 设置地图不可旋转 self.mapView.rotateEnabled = NO; // 设置显示用户当前位置 self.mapView.shows

javascript中通过replace函数搜索和替换指定字符串

javascript中我们可以通过replace函数替换部分字符串为指定字符串,本文展示了replace的详细用法,并且通过范例演示了如何进行部分替换.完整替换和不区分大小写替换. javascript中我们可以通过replace函数替换部分字符串为指定字符串.下面是replace函数的基本语法: str_var.replace("search_string", "replace_string") 下面看一个简单的范例: <script type="

NSString中的搜索指定的某OC字符串:-rangeOfString:

NSString *str1 = @"can you \n speak English"; NSString *str = @"\n"; //在str1这个字符串中搜索\n,判断有没有 if ([str1 rangeOfString:str].location != NSNotFound) { NSLog(@"这个字符串中有\n"); } //rangeOfString 前面的参数是要被搜索的字符串,后面的是要搜索的字符 //NSNotFound

使用全文搜索

一.检查相关组件 1. 检查全文搜索组建是否安装 SELECT SERVERPROPERTY('IsFullTextInstalled'); 全文索引支持的数据类型包括CHAR, VARCHAR, NCHAR, NVARCHAR,TEXT, NTEXT, IMAGE, XML, and VARBINARY(MAX) 2. 检查装了哪些文档过滤器 过滤器(ifilters) 用来提取文本信息,并且移除文档的格式 EXEC sys.sp_help_fulltext_system_components

MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持

背景:搞个个人博客的全文搜索得用like啥的,现在mysql版本号已经大于5.6.4了也就支持了innodb的全文搜索了,刚查了下目前版本号都到MySQL Community Server 5.6.19 了,所以,一些小的应用可以用它做全文搜索了,像sphinx和Lucene这样偏重的.需要配置或开发的,节省了成本. 这儿有一个原创的Mysql全文搜索的文章, mysql的全文搜索功能:http://blog.csdn.net/bravekingzhang/article/details/672

如何在MySQL中获得更好的全文搜索结果

很多互联网应用程序都提供了全文搜索功能,用户可以使用一个词或者词语片断作为查询项目来定位匹配的记录.在后台,这些程序使用在一个SELECT 查询中的LIKE语句来执行这种查询,尽管这种方法可行,但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时候. mysql针对这一问题提供了一种基于内建的全文查找方式的解决方案.在此,开发者只需要简单地标记出需要全文查找的字段,然后使用特殊的MySQL方法在那些字段运行搜索,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜

Lucene全文搜索原理与使用

本文中主要是对于Lucene全文搜索的基础原理进行简单的分析,以及Lucene实现全文搜索的流程,之后就是Lucene在Java中的最简单使用:创建索引,查询索引库: 本文中使用的Lucene主要是4.10.3和6.0.0,两个版本的原理相同,但是API的使用并不相同: 1.结构化数据与非结构化数据 2.非结构化数据搜索 3.全文搜索 4.搜索如何实现 5.Lucene实现全文搜索流程 6.Lucene的API使用 1.结构化数据与非结构化数据 结构化数据:指具有固定格式或有限长度的数据,如数据

全文搜索之 Elasticsearch

概述 Elasticsearch (ES)是一个基于 Lucene 的开源搜索引擎,它不但稳定.可靠.快速,而且也具有良好的水平扩展能力,是专门为分布式环境设计的. 特性 安装方便:没有其他依赖,下载后安装非常方便:只用修改几个参数就可以搭建起来一个集群 JSON:输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便 RESTful:基本所有操作(索引.查询.甚至是配置)都可以通过 HTTP 接口进行 分布式:节点对外表现对等(每个节点都可以用来做入口):加入节点自动均衡 多租户