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

    

--一般查询

DECLARE @string VARCHAR(max)

SET @string='a'--要查询的字符串

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 '+@colname+' from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%''')
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 '+@colname+' from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%''')
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 'a'

查询结果:

    

 

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

  1. mysql全库搜索指定字符串

    mysql全库搜索指定字符串 DELIMITER // DROP PROCEDURE IF EXISTS `proc_FindStrInAllDataBase`; # CALL `proc_FindS ...

  2. MSSQL 全表搜索 指定字符串

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

  3. 在stream流和byte[]中查找(搜索)指定字符串

    在 stream流 和 byte[] 中查找(搜索)指定字符串 这里注重看的是两个 Search 的扩展方法,一个是 stream 类型的扩展,另一个是 byte[] 类型的扩展, 如果大家有更好的“ ...

  4. Percona备份mysql全库及指定数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份) Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对I ...

  5. Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

    原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对In ...

  6. 全库搜索某个内容的sql

    DECLARE @what varchar(800) SET @what='联系' --要搜索的字符串 DECLARE @sql varchar(8000) DECLARE TableCursor C ...

  7. Eclipse全项目搜索指定文件&字串

    在eclipse中如果希望在大量的项目中寻找指定的文件可不是一件轻松的事,还好eclipse提供了强大的搜索功能. 我们可以通过通配符或正则表达式来设定查寻条件,下面是操作示例: ctrl+h 打开搜 ...

  8. [Oracle]根据字段值全库搜索相关数据表和字段

    这个需求比较冷门,但对于在某些特定的情况下,还是会有这样的需要的.好在Oracle实现还比较方便,用存储过程则轻松实现. 查询字符串: create or replace procedure sear ...

  9. Oracle - 如何查找指定字符串所出现的表

    需求:举个例子,oracle测试库的scott用户下面的有张emp表,emp表的ename列中有一行数据为'CLARK'.红色标记部分. SQL> select * from scott.emp ...

随机推荐

  1. 翻转链表reverse linked list:全部,m~n

    全部 [抄题]: Reverse a singly linked list. [思维问题]: 以为要用dummy node [一句话思路]: 直接全部转过来就行了,用dummy node反而多余 [输 ...

  2. Python学习记录day7

    目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...

  3. ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数

    ROS Indigo beginner_Tutorials-08 ROS服务 和 ROS参数 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...

  4. Markdown的简单使用

    markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式.(扩展名为.md)   markdown语法 # 一级标题 ## 二级标题 ### ...

  5. KMP(2)

    KMP 算法(2):其细微之处 2017 年 05 月 13 日 • 技术 系列文章目录 KMP 算法(1):如何理解 KMP KMP 算法(2):其细微之处 本篇来谈一谈 KMP 的一些细微之处,直 ...

  6. Mint UI 之 Swipe 组件

    #为什么不显示内容? 一定要指定 mt-swipe 元素的宽和高. <mt-swipe :auto="4000" class="swipe"> &l ...

  7. 在原型设计上,UI和UX设计师有哪三个区别?

    原型设计在日常的软件开发过程中是必不可少的,不管是UI还是UX设计师,很多工作都会涉及到原型设计.那么这两类设计师在设计原型的时候表现出了哪些的不同点呢?今天就让我们来讨论一下,先说说我发现的3个不同 ...

  8. linux 基本工具相关

    首先是linux下安装ssh服务(root) 由于是使用debian版本 与其他稍有差别 安装服务 apt-get install ssh 查看服务是否开启 service ssh status 开启 ...

  9. MongoDB复制集搭建(3.4.17版)

    ==版本== mongodb-linux-x86_64-rhel70-3.4.17.tgz ==准备== 3个节点,我这里的IP及hostname分别是: 10.11.2.52 dscn49 10.1 ...

  10. 通过程序修改注册表键值来达到修改IE配置参数的目的

    通过程序修改注册表键值来达到修改IE配置参数的目的 使用IE访问应用程序或网页时经常需要设置一些选项(工具-Internet 选项),比如为了避免缓存网页,把工具-Internet选项-常规选项卡-I ...