• 一个比较笨的全文搜索的例子(分析结构用)-模糊查找


     1  
     2 
     3 
     4  --在所有的char类型的列中模糊查找某个值。
     5 --**注意预先切换到当前的数据库中。
     6 DECLARE  @TABLE_CATALOG NVARCHAR(MAX)--数据库名
     7   ,@TABLE_SCHEMA NVARCHAR(MAX)--架构名
     8   ,@TABLE_NAME NVARCHAR(MAX)--表名
     9   ,@COLUMN_NAME NVARCHAR(MAX)--列名
    10   ,@SQL NVARCHAR(MAX)--动态sql语句
    11   ,@find_char nvarchar(max)--查找的内容变量
    12 --*********************************************************************************
    13   set @find_char='1月22日支办公费、车修、过路费、宿费等款'--输入查找的内容
    14 --*********************************************************************************
    15 declare @t table (TABLE_CATALOG NVARCHAR(MAX)
    16   ,TABLE_SCHEMA NVARCHAR(MAX)
    17   ,TABLE_NAME NVARCHAR(MAX)
    18   ,COLUMN_NAME NVARCHAR(MAX))--定义表变量
    19 DECLARE C1 CURSOR FOR--定义游标,从INFORMATION_SCHEMA.COLUMNS和INFORMATION_SCHEMA.TABLES两个系统视图中获取表和字段的信息,用于下面构建动态sql语句
    20   SELECT A.TABLE_CATALOG
    21     ,A.TABLE_SCHEMA
    22     ,A.TABLE_NAME
    23     ,A.COLUMN_NAME
    24   FROM INFORMATION_SCHEMA.COLUMNS A--注意在这里修改数据库名称
    25   JOIN INFORMATION_SCHEMA.TABLES B--注意在这里修改数据库名称
    26   ON  A.TABLE_CATALOG=B.TABLE_CATALOG
    27    AND A.TABLE_SCHEMA=B.TABLE_SCHEMA
    28    AND A.TABLE_NAME=B.TABLE_NAME
    29         WHERE   B.TABLE_TYPE='BASE TABLE'--仅仅查询表,不包括视图,可根据实际情况修改
    30     AND 
    31      A.TABLE_NAME  IN 
    32      (select a.name--,b.rowcnt--,object_name(b.id),a.id 
    33      from sysobjects a join sysindexes b
    34      on a.id=b.id 
    35      where a.xtype='u' and b.indid<2 
    36                      --and a.name like '%zy%'--限定表的名称
    37                      --and rowcnt <=10000--限定记录条数
    38      )
    39     AND
    40      (DATA_TYPE LIKE N'%CHAR' or DATA_TYPE like N'%text')--仅仅查找CHAR类型的列CHAR,VARCHAR,NCHAR,NVARCHAR四种情况,可根据实际情况修改
    41 
    42 OPEN C1
    43 FETCH NEXT FROM C1 INTO    @TABLE_CATALOG
    44         ,@TABLE_SCHEMA
    45         ,@TABLE_NAME
    46         ,@COLUMN_NAME
    47 WHILE @@FETCH_STATUS=0
    48 BEGIN
    49  SET @SQL=
    50     'IF EXISTS (SELECT ['+@COLUMN_NAME+'] FROM ['+@TABLE_CATALOG+'].['+@TABLE_SCHEMA+'].['
    51     +@TABLE_NAME+'] WHERE ['+@COLUMN_NAME+'] like ''%'+@find_char+'%'')'--模糊查找
    52     +'print ''select * from ['' + @TABLE_CATALOG+''].['' + @TABLE_SCHEMA+''].['' + @TABLE_NAME + ''] where ['' + @COLUMN_NAME + ''] like %''+@find_char+''%'''--构建动态sql语句,生成可以直接查询的语句。
    53     EXEC SP_EXECUTESQL @SQL--执行动态sql语句
    54       ,N'@TABLE_CATALOG NVARCHAR(MAX) OUT
    55       ,@TABLE_SCHEMA NVARCHAR(MAX) OUT
    56       ,@TABLE_NAME NVARCHAR(MAX) OUT
    57       ,@COLUMN_NAME NVARCHAR(MAX) OUT
    58       ,@find_char nvarchar(max) out'
    59       ,@TABLE_CATALOG  OUT
    60       ,@TABLE_SCHEMA  OUT
    61       ,@TABLE_NAME OUT
    62       ,@COLUMN_NAME OUT
    63       ,@find_char  out--生成的查询语句仍然需要手工加上单引号
    64    FETCH NEXT FROM C1 INTO   @TABLE_CATALOG
    65        ,@TABLE_SCHEMA 
    66        ,@TABLE_NAME
    67        ,@COLUMN_NAME
    68 END
    69 CLOSE C1
    70 DEALLOCATE C1
    71   
  • 相关阅读:
    2017-2018-1 20155225 《信息安全系统设计基础》第三周学习总结
    2017-2018-1 20155225 《信息安全系统设计基础》第2周课堂实验
    20155225 2017-2018-1 《信息安全系统设计基础》第一周学习总结
    课堂实践——数据库
    20155225 2016-2017-2《Java程序设计》课程总结
    20155225 实验五《网络编程与设计》实验报告
    20155225 实验四《Android程序设计》实验报告
    转载
    HDU
    SCU
  • 原文地址:https://www.cnblogs.com/bgbird/p/4959228.html
Copyright © 2020-2023  润新知