当前位置:首页 > 数据库 > Sqlserver

MSSQL 全文搜索 指定字符串

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

 

 

                --一般查询
DECLARE
@string VARCHAR(max) SET@string=七岁童年--要查询的字符串DECLARE@tbnameVARCHAR(50) DECLARE tbroy CURSORFORSELECT name FROM sysobjects WHERE xtype =u --遍历所有的表OPEN tbroy FETCHnextFROM tbroy INTO@tbname--创建临时表IFObject_id(Tempdb..#temp_table) ISNOTNULLDROPTABLE #temp_table CREATETABLE #temp_table ( ID INTIDENTITY(1, 1), tbname VARCHAR(max),--表名 colname VARCHAR(max)--字段名 ) WHILE@@fetch_status=0BEGINDECLARE@colnameVARCHAR(50) DECLARE colroy CURSORFORSELECT name FROM syscolumns WHERE id =Object_id(@tbname) AND xtype IN (SELECT xtype FROM systypes WHERE name IN ( varchar , nvarchar , char , nchar ) --数据类型为字符型的字段 ) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段OPEN colroy FETCHnextFROM colroy INTO@colnameWHILE@@fetch_status=0BEGINDECLARE@sqlNVARCHAR(1000), @jINTSELECT@sql=select @i=count(1) from +@tbname+ where +@colname+ like +‘‘‘%+@string+%‘‘‘EXEC Sp_executesql @sql, N@i int output, @i=@j output --输出满足条件表的记录数IF@j>0BEGININSERTINTO #temp_table SELECT@tbname, @colname--exec( ‘select distinct ‘+@colname+‘ from ‘ +@tbname + ‘ where ‘+ @colname+ ‘ like ‘+ ‘‘‘%‘+@string+ ‘%‘‘‘)ENDFETCHnextFROM colroy INTO@colnameENDCLOSE colroy DEALLOCATE colroy FETCHnextFROM tbroy INTO@tbnameENDCLOSE tbroy DEALLOCATE tbroy SELECT id, tbname as表名, colname as字段名FROM #temp_table IFObject_id(Tempdb..#temp_table) ISNOTNULL--删除临时表DROPTABLE #temp_table go

 

 

            --
            存储过程实现
            
--
            创建存储过程
            CREATE
            PROC Search (@stringNVARCHAR(max))
ASBEGINDECLARE@tbnameVARCHAR(50)
      DECLARE tbroy CURSORFORSELECT name
        FROM   sysobjects
        WHERE  xtype =u --遍历所有的表OPEN tbroy

      FETCHnextFROM tbroy INTO@tbname--创建临时表IFObject_id(Tempdb..#temp_table) ISNOTNULLDROPTABLE #temp_table

      CREATETABLE #temp_table
        (
           ID      INTIDENTITY(1, 1),
           tbname  VARCHAR(max),--表名
           colname VARCHAR(max)--字段名        )

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

            FETCHnextFROM colroy INTO@colnameWHILE@@fetch_status=0BEGINDECLARE@sqlNVARCHAR(1000),
                          @jINTSELECT@sql=select @i=count(1) from +@tbname+ where +@colname+ like +‘‘‘%+@string+%‘‘‘EXEC Sp_executesql
                    @sql,
                    N@i int output,
                    @i=@j output --输出满足条件表的记录数IF@j>0BEGININSERTINTO #temp_table
                        SELECT@tbname,
                               @colname--exec( ‘select distinct ‘+@colname+‘ from ‘ +@tbname + ‘ where ‘+ @colname+ ‘ like ‘+ ‘‘‘%‘+@string+ ‘%‘‘‘)ENDFETCHnextFROM colroy INTO@colnameENDCLOSE colroy

            DEALLOCATE colroy

            FETCHnextFROM tbroy INTO@tbnameENDCLOSE tbroy

      DEALLOCATE tbroy

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

      IFObject_id(Tempdb..#temp_table) ISNOTNULL--删除临时表DROPTABLE #temp_table
  ENDgo--使用方法EXEC Search 七岁童年

 

 

原文:http://www.cnblogs.com/simoncai/p/4383627.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐