平时在在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. MSSQL 全库搜索 指定字符串

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

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

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

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

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

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

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

  5. sqlserver 删除表中 指定字符串

    源表T "单据编号"               "航班计划日期"        "航班号"          "起飞航站代码&q ...

  6. SQL 知道字段名 全表搜索此字段属于哪个表

    SELECT name FROM sysobjects WHERE id IN (SELECT ID FROM syscolumns WHERE name='字段名')

  7. (六)lucene之其他查询方式(组合查询,制定数字范围、指定字符串开头)

    本章使用的是lucene5.3.0 指定数字范围查询 package com.shyroke.test; import java.io.IOException; import java.nio.fil ...

  8. MySQL(十)操纵表及全文本搜索

    一.创建表 MySQL不仅用于表数据操作,还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 创建表一般有如下两种方式: ①使用具有交互式创建和管理表的工具: ②直接使用MySQL语句操纵表 ...

  9. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

随机推荐

  1. 算法系列:FFT 001

    转载自http://blog.csdn.net/orbit/article/details/17210461 2012年9月的时候,一个南京的大学生从电视台播放的一段记者采访360总裁周鸿祎的视频中破 ...

  2. UVA 11481 Arrange the Numbers(组合数学 错位排序)

    题意:长度为n的序列,前m位恰好k位正确排序,求方法数 前m位选k个数正确排,为cm[m][k],剩余m - k个空位,要错排,这m - k个数可能是前m个数中剩下的,也可能来自后面的n - m个数 ...

  3. 目标跟踪_MeanShift

    找到一些关于目标跟踪的资料 http://blog.csdn.net/jinshengtao/article/details/30258833 http://blog.sina.com.cn/s/bl ...

  4. EventBus 一

    一.概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间 ...

  5. 宿主机ping不通虚拟机cenos7

    参考网址1:http://zhidao.baidu.com/link?url=2v3NXGyzPT-XTYwon8PesZLnMg02Ako6nDub3vJiJt4miSmkOA-04xLUqfu9s ...

  6. ScrollView控件实现屏幕滚动

    滚动视图是指当拥有很多内容,屏幕显示不完全时,需要通过滚动来显示完整的视图 ScrollView的种类: (1)水平滚动视图:HorizontalScrollView (2)垂直滚动视图:Scroll ...

  7. AngularJS学习之依赖注入

    1.什么是依赖注入:简称DI,是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分. 该模式分离了客户端 ...

  8. C#连接Access数据库(详解)

    做一个用VS2012的C#连接Access数据库的备忘, SQL数据库固然强大,有大微软的强力技术支持,LINQ的方便操作,但是如果写一个小程序对数据库方面没有什么大的要求的话,将来在数据库方面就可以 ...

  9. python中threading的用法

    摘自:http://blog.chinaunix.net/uid-27571599-id-3484048.html 以及:http://blog.chinaunix.net/uid-11131943- ...

  10. BZOJ 2303: [Apio2011]方格染色 题解

    题目大意: 有n*m的方格,中间的数要么是1,要么是0,要求任意2*2的方格中的数异或和为1.已知一部分格子中的数,求合法的填数的方案数. 思路: 由题意得:a[i][j]^a[i][j+1]^a[i ...