MSSQL 全表搜索 指定字符串
平时在在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 全表搜索 指定字符串的更多相关文章
- MSSQL 全库搜索 指定字符串
平时在在MSSql中查询数据的时候,想查找,某个字段在数据库中是否存在,并且查询出在哪个表中,哪个字段下面,在不知道的情况下,操作起来会很麻烦,然后就写了一个sql语句,使用起来感觉挺方便的.当然了, ...
- mysql全库搜索指定字符串
mysql全库搜索指定字符串 DELIMITER // DROP PROCEDURE IF EXISTS `proc_FindStrInAllDataBase`; # CALL `proc_FindS ...
- 在stream流和byte[]中查找(搜索)指定字符串
在 stream流 和 byte[] 中查找(搜索)指定字符串 这里注重看的是两个 Search 的扩展方法,一个是 stream 类型的扩展,另一个是 byte[] 类型的扩展, 如果大家有更好的“ ...
- Eclipse全项目搜索指定文件&字串
在eclipse中如果希望在大量的项目中寻找指定的文件可不是一件轻松的事,还好eclipse提供了强大的搜索功能. 我们可以通过通配符或正则表达式来设定查寻条件,下面是操作示例: ctrl+h 打开搜 ...
- sqlserver 删除表中 指定字符串
源表T "单据编号" "航班计划日期" "航班号" "起飞航站代码&q ...
- SQL 知道字段名 全表搜索此字段属于哪个表
SELECT name FROM sysobjects WHERE id IN (SELECT ID FROM syscolumns WHERE name='字段名')
- (六)lucene之其他查询方式(组合查询,制定数字范围、指定字符串开头)
本章使用的是lucene5.3.0 指定数字范围查询 package com.shyroke.test; import java.io.IOException; import java.nio.fil ...
- MySQL(十)操纵表及全文本搜索
一.创建表 MySQL不仅用于表数据操作,还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 创建表一般有如下两种方式: ①使用具有交互式创建和管理表的工具: ②直接使用MySQL语句操纵表 ...
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...
随机推荐
- Linux虚拟机添加新硬盘的全程图解
查看网的文章,我将在vm虚拟机LinuxRedhat中添加一个新的硬盘, 过程大致如下: 1.选择"VM"----"setting"并打开,将光标定位在hard ...
- 当年只会C# 所以写C++就成这样了!
这应该是4-5年前了. 当年之会c#敲敲代码也不会C++但深信开发这东西只要思想有了. 只是语法问题. 对于C++这貌似只有大牛才能胜任的,而对于我来说是如此困难. 所以想想办法搞了很多通用类来避免C ...
- windows phone 摄像头得到图片是旋转90°
我上个随笔讲到,windows phone 拍出来的photo如果直接使用是反转了90°的. 研究了很久..终于发现问题.其实..这是使用习惯问题... CameraCaptureUI 得到的phot ...
- 初学微信小程序
最近微信推出了微信小程序,为此我学了几天,基本了解了组件及简单语法,但是今天我自己想要独立写一个demo时,忽然发现难道我的不是微信小程序的语法(我以前是iOS 开发,不用css),而是css样式的设 ...
- B窗体继承于A窗体,B启动:问题点
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; t ...
- Android自动化测试 - Robotium之re-sign.jar重签名后安装失败提示Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]解决方案
问题:在用re-sign.jar重签名apk文件后,显示重签名成功,但在实际安装过程中确提示:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 原因:网上查 ...
- VS2008切换设计视图卡死 停止响应
最近VS2008出现一个问题,打开项目后很快就非常慢,特别是切换设计视图马上卡死,很久也反应不过来.网上找了几种办法,都不好使,有的说是office影响的,有的说要改注册表,都试了一下,还是没用.后来 ...
- [转]Travis Ci的最接底气的中文使用教程
相信大家对Travis Ci已经不再陌生了,Github上已经有大部分的项目已经采用了它. Travis Ci是一个基于晕的持续集成项目,目前已经支持大部分主流语言了,如:C.PHP.Ruby.Pyt ...
- List集合特有的迭代器 ListIterator
- 快排查找第K小的数
#include "iostream.h" using namespace std; int findMedian(int *A,int left,int right){ int ...