sql server 2012 数据库所有表里查找某字符串的方法

 更新时间:2013年03月12日 14:22:49   作者:  
此TSQL语句是针对SQL Server 2012编写。如果使用之前版本,需要对部分语句进行重写。
复制代码 代码如下:

USE [数据库名称];

 --1.定义需要查找的关键字。在搜索中,使用模糊搜索:LIKE '%@key_find%'
 DECLARE @key_find NVARCHAR(MAX) = '123';--假设是找字符串"123"

 --2.用游标Cursor_Table,遍历所有表
 DECLARE Cursor_Table CURSOR FOR
     SELECT name from sysobjects WHERE xtype = 'u' AND name <> 'dtproperties';
 OPEN Cursor_Table;
 DECLARE @tableName NVARCHAR(MAX);
 FETCH NEXT from Cursor_Table INTO @tableName;
 WHILE @@fetch_status = 0
 BEGIN
     DECLARE @tempSQLText NVARCHAR(MAX) = '';

     --3.在表中,用游标columnCursor,遍历所有字段。注意,只遍历字符串类型的字段(列)
     DECLARE columnCursor CURSOR FOR
         SELECT Name FROM SysColumns WHERE ID = Object_Id( @tableName ) and
                                                                             (
                                                                                 xtype = 35 or --text
                                                                                 xtype = 99 or --ntext
                                                                                 xtype = 167 or --varchar
                                                                                 xtype = 175 or --char
                                                                                 xtype = 231 or --nvarchar
                                                                                 xtype = 239 or --nchar
                                                                                 xtype = 241 --xml
                                                                             )
     OPEN columnCursor;
     DECLARE @columnName NVARCHAR(MAX);
     FETCH NEXT from columnCursor INTO @columnName;
     WHILE @@fetch_status = 0
     BEGIN

         --4.在表的字段中,对每一行进行模糊搜索,并输出找到的信息。
         DECLARE @DynamicSQLText NVARCHAR(MAX) = 'IF ( EXISTS ( SELECT * FROM [' + @tableName + '] WHERE [' + @columnName + '] LIKE ''%' + @key_find + '%'' ) ) BEGIN DECLARE @CurrentTableCount Bigint = ( SELECT COUNT(*) From [' + @tableName + '] ); PRINT ''Find : Table [' + @tableName + '], Column [' + @columnName + '], Row Count:'' + CAST( @CurrentTableCount AS NVARCHAR(MAX) ) + ''.'';  END';
         EXEC( @DynamicSQLText );
         FETCH NEXT from columnCursor INTO @columnName
     END
     exec(@tempSQLText);
     CLOSE columnCursor;
     DEALLOCATE columnCursor;
     FETCH NEXT from Cursor_Table INTO @tableName;
 END
 CLOSE Cursor_Table;
 DEALLOCATE Cursor_Table;

相关文章

  • 积分获取和消费的存储过程学习示例

    积分获取和消费的存储过程学习示例

    这篇文章主要介绍了积分获取和消费的存储过程学习示例,这个只是学习一下存储过程的使用方法,需要的朋友可以参考下
    2014-03-03
  • SQL Server中使用表变量和临时表

    SQL Server中使用表变量和临时表

    这篇文章介绍了SQL Server中使用表变量和临时表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • sql 2000 无法执行查询,因为一些文件缺少或未注册"的解决方法

    sql 2000 无法执行查询,因为一些文件缺少或未注册"的解决方法

    在SQL server 2000中打开表查看数据的时候,提示说无法执行查询,因为一些文件缺少或未注册用查询分析器可以查看数据,重装了sql2000也没有用,这里分享下解决方法
    2014-01-01
  • 数据库中聚簇索引与非聚簇索引的区别[图文]

    数据库中聚簇索引与非聚簇索引的区别[图文]

    在《数据库原理》里面,对聚簇索引的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索引顺序与数据物理排列顺序无关。正式因为如此,所以一个表最多只能有一个聚簇索引
    2012-02-02
  • 揭秘SQL Server 2014有哪些新特性(1)-内存数据库

    揭秘SQL Server 2014有哪些新特性(1)-内存数据库

    微软SQL Server 2014提供了众多激动人心的新功能,但其中最让人期待的特性之一就是代号为” Hekaton”的内存数据库了,内存数据库特性并不是SQL Server的替代,而是适应时代的补充,现在SQL Server具备了将数据表完整存入内存的功能。那么今天我们就先来看看内存数据库
    2014-08-08
  • SQL_Server全文索引的使用实例演示

    SQL_Server全文索引的使用实例演示

    开启SQL全文搜索提升查询性能,本文示范如何使用SQL全文索引的方法。需要的朋友可以参考下
    2013-07-07
  • Sqlserver中char,nchar,varchar与Nvarchar的区别分析

    Sqlserver中char,nchar,varchar与Nvarchar的区别分析

    Sqlserver中char,nchar,varchar与Nvarchar的区别分析,使用sqlserver的朋友可以参考下。
    2011-08-08
  • 详解SQL报错盲注

    详解SQL报错盲注

    这篇文章主要介绍了SQL报错盲注详解,包括SQL报错函数,SQL报错盲注payload构造,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • SQL SERVER调用存储过程小结

    SQL SERVER调用存储过程小结

    在SQL Server数据库的维护或者Web开发中,有时需要在存储过程或者作业等其他数据库操作中调用其它的存储过程,下面介绍其调用的方法
    2015-11-11
  • sql集合运算符使用方法

    sql集合运算符使用方法

    今天介绍数据库里面的集合运算符,它是指匹配集合的每一个结果。数据库集合运算符包括:IN、ANY、SOME、ALL以及EXISTS等
    2014-01-01

最新评论