平时在在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. 源码包的解压 .tar.gz /.tar.bz2的解压

    解压方式如下: .tar.gz     格式解压为          tar   -zxvf   xx.tar.gz .tar.bz2   格式解压为          tar   -jxvf    ...

  2. ios runtime简单实用(添加动态属性)

    #import "Person.h" @interface Person (PersonCategory)   // 添加Person中没有的name属性 @property (n ...

  3. 一个性能较好的JVM参数配置

    一个性能较好的web服务器jvm参数配置: -server//服务器模式-Xmx2g //JVM最大允许分配的堆内存,按需分配-Xms2g //JVM初始分配的堆内存,一般和Xmx配置成一样以避免每次 ...

  4. 利用Python和webhook实现自动提交代码

    最近在为公司书写项目的api文档,计划利用码云的wiki管理整个项目,公司自有git作为项目内容依托,这样全员都可参与,而我定期向码云推送就可以了. 问题 根据需求遇见了这样一个问题:我每次从git上 ...

  5. Linux tcpdump命令

    一.简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据 ...

  6. 1. Install Git and GitExtension

    Install Git Step 1:   Run

  7. maven使用感受

    第一次接触的时候,什么都不懂,感觉好复杂. 后来系统地看了一个使用教程: 简单评价一下: 自动帮我们下载jar架包,还有就是可以执行命令自己部署到远程服务器上面去. 缺点: 学习成本.一般人不了解.第 ...

  8. 让QQ好友现形

    方法一 现在使用QQ的朋友,越来越注重保护自己的个人信息,如果对方将个人资料设置为保密你就无法看到对方的资料了,而这位好友如果又有着不断变换昵称的不良习惯,那么随着QQ好友名单的不断增加,时间一长,你 ...

  9. hdu-1207(规律推导)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1207 思路: 可以按照类似汉诺塔的推导形式来推导, 首先,有四个柱子,a,b,c,d. (1)a的x个 ...

  10. hdu-1063(大数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1063 思路:1.大数乘法模板 2.考虑小数点的位置 3.乘法前后判断前后道0 参考文章:https:/ ...