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;

(0)

相关推荐

  • sql server 临时表 查找并删除的实现代码

    if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#temp')) drop table #temp临时表 可以创建本地和全局临时表.本地临时表仅在当前会话中可见:全局临时表在所有会话中都可见. 本地临时表的名称前面有一个编号符 (#table_name),而全局临时表的名称前面有两个编号符 (##table_name). SQL 语句使用 CREATE TABLE 语句中为 table_name 指定的

  • 查找sqlserver查询死锁源头的方法 sqlserver死锁监控

    查找出SQLServer的死锁和阻塞的源头 --查找出SQLServer死锁和阻塞的源头 复制代码 代码如下: use mastergodeclare @spid int,@bl intDECLARE s_cur CURSOR FORselect  0 ,blockedfrom (select * from sysprocesses where  blocked>0 ) awhere not exists(select * from (select * from sysprocesses whe

  • mysql data文件夹位置查找

    找到自己的mysql数据库的安装位置,如下 C:\Program Files\MySQL\MySQL Server 5.1,在它里面有个的my.ini文件,寻找如下行: [mysqld] 复制代码 代码如下: # The TCP/IP Port the MySQL Server will listen on port=3306 #Path to installation directory. All paths are usually resolved relative to this. bas

  • MySQL慢查询查找和调优测试

    编辑 my.cnf或者my.ini文件,去除下面这几行代码的注释: 复制代码 代码如下: log_slow_queries = /var/log/mysql/mysql-slow.log long_query_time = 2 log-queries-not-using-indexes 这将使得慢查询和没有使用索引的查询被记录下来. 这样做之后,对mysql-slow.log文件执行tail -f命令,将能看到其中记录的慢查询和未使用索引的查询. 随便提取一个慢查询,执行explain: 复制代

  • mysql 数据表中查找重复记录

    复制代码 代码如下: select user_name,count(*) as count from user_table group by user_name having count>1; 这个我在很早有发过一个asp下的ACCESS 的

  • android中sqlite的按条件查找的小例子

    name      hobby Tom        football Peter       basketball 我们如果要查找爱好是football的一行数据怎么办呢?在网上找了很多方法,感觉都说不到点子上,所以浪费了很多时间,好在终于解决了,解决方法如下 [java] 复制代码 代码如下: Cursor mcursor=mSQLiteDatabase.query(tableName, new String[]{"id as _id","name","

  • SQL中查找某几个字段完全一样的数据

    有以下一个表 movestar(id,name,title,address),内容为: 现在要查找所有具有相同的title和address的人 复制代码 代码如下: select star1.name,star2.name,star1.title,star1.address from movestar as star1,movestar as star2 where star1.title = star2.title     and star1.address = star2.address  

  • sqlserver中查找所有包含了某个文本的存储过程

    上图说明吧.上图存储过程调用了mup_GetA(我把和项目相关的命名都擦除掉了) 上图通过sqlserver 图形管理器自带的功能查看依赖于mup_GetA的对象. 结果有点雷人,居然没有列出mup_GetB 来(我使用的是sql server 2005) 下面是解决方法 方法1: 打开数据库管理界面->右击数据库->tasks->Generate Scripts->..... 导出所有存储过程到文件中,然后ctrl+F查找 方法2: 复制代码 代码如下: SELECT ROUTI

  • mssql查找备注(text,ntext)类型字段为空的方法

    解决办法有很多: 1 . select * from 表 where datalength(字段)=0 2.  select * from 表 where cast(字段 as varchar(100))='' 3. select * from 表 where 字段 like ''

  • SQLserver中字符串查找功能patindex和charindex的区别

    最近经常使用字符串查找功能. 包括 1.全匹配查找字符串 2.模糊查找字符串 CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置.PATINDEX 可使用通配符,而 CHARINDEX 不可以. 这两个函数都带有2个参数: 1 希望获取其位置的模式.使用 PATINDEX,模式是可以包含通配符的字面字符串.使用 CHARINDEX,模式是字面字符串(不能包含通配符). 2 字符串值表达式(通常为列名). 例如,查找模式"wonderful"在 titles 表中 n

随机推荐