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

    

  1. --一般查询
  2.  
  3. DECLARE @string VARCHAR(max)
  4.  
  5. SET @string='a'--要查询的字符串
  6.  
  7. DECLARE @tbname VARCHAR(50)
  8. DECLARE tbroy CURSOR FOR
  9. SELECT name
  10. FROM sysobjects
  11. WHERE xtype = 'u ' --遍历所有的表
  12.  
  13. OPEN tbroy
  14.  
  15. FETCH next FROM tbroy INTO @tbname
  16.  
  17. --创建临时表
  18. IF Object_id('Tempdb..#temp_table') IS NOT NULL
  19. DROP TABLE #temp_table
  20.  
  21. CREATE TABLE #temp_table
  22. (
  23. ID INT IDENTITY(1, 1),
  24. tbname VARCHAR(max),--表名
  25. colname VARCHAR(max)--字段名
  26. )
  27.  
  28. WHILE @@fetch_status = 0
  29. BEGIN
  30. DECLARE @colname VARCHAR(50)
  31. DECLARE colroy CURSOR FOR
  32. SELECT name
  33. FROM syscolumns
  34. WHERE id = Object_id(@tbname)
  35. AND xtype IN (SELECT xtype
  36. FROM systypes
  37. WHERE name IN ( 'varchar ', 'nvarchar ', 'char ', 'nchar ' ) --数据类型为字符型的字段
  38. ) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段
  39.  
  40. OPEN colroy
  41.  
  42. FETCH next FROM colroy INTO @colname
  43.  
  44. WHILE @@fetch_status = 0
  45. BEGIN
  46. DECLARE @sql NVARCHAR(1000),
  47. @j INT
  48.  
  49. SELECT @sql = 'select @i=count(1) from ' + @tbname
  50. + ' where ' + @colname + ' like ' + '''%' + @string
  51. + '%'''
  52.  
  53. EXEC Sp_executesql
  54. @sql,
  55. N'@i int output',
  56. @i=@j output --输出满足条件表的记录数
  57. IF @j > 0
  58. BEGIN
  59. INSERT INTO #temp_table
  60. SELECT @tbname,
  61. @colname
  62. --exec( 'select distinct '+@colname+' from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%''')
  63. END
  64.  
  65. FETCH next FROM colroy INTO @colname
  66. END
  67.  
  68. CLOSE colroy
  69.  
  70. DEALLOCATE colroy
  71.  
  72. FETCH next FROM tbroy INTO @tbname
  73. END
  74.  
  75. CLOSE tbroy
  76.  
  77. DEALLOCATE tbroy
  78.  
  79. SELECT id, tbname as '表名', colname as '字段名'FROM #temp_table
  80.  
  81. IF Object_id('Tempdb..#temp_table') IS NOT NULL--删除临时表
  82. DROP TABLE #temp_table
  83. go

查询结果:

     

  1. --存储过程实现
  2. --创建存储过程
  3. CREATE PROC Search (@string NVARCHAR(max))
  4. AS
  5. BEGIN
  6. DECLARE @tbname VARCHAR(50)
  7. DECLARE tbroy CURSOR FOR
  8. SELECT name
  9. FROM sysobjects
  10. WHERE xtype = 'u ' --遍历所有的表
  11. OPEN tbroy
  12.  
  13. FETCH next FROM tbroy INTO @tbname
  14.  
  15. --创建临时表
  16. IF Object_id('Tempdb..#temp_table') IS NOT NULL
  17. DROP TABLE #temp_table
  18.  
  19. CREATE TABLE #temp_table
  20. (
  21. ID INT IDENTITY(1, 1),
  22. tbname VARCHAR(max),--表名
  23. colname VARCHAR(max)--字段名
  24. )
  25.  
  26. WHILE @@fetch_status = 0
  27. BEGIN
  28. DECLARE @colname VARCHAR(50)
  29. DECLARE colroy CURSOR FOR
  30. SELECT name
  31. FROM syscolumns
  32. WHERE id = Object_id(@tbname)
  33. AND xtype IN (SELECT xtype
  34. FROM systypes
  35. WHERE name IN ( 'varchar ', 'nvarchar ', 'char ', 'nchar ' ) --数据类型为字符型的字段
  36. ) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段
  37. OPEN colroy
  38.  
  39. FETCH next FROM colroy INTO @colname
  40.  
  41. WHILE @@fetch_status = 0
  42. BEGIN
  43. DECLARE @sql NVARCHAR(1000),
  44. @j INT
  45.  
  46. SELECT @sql = 'select @i=count(1) from ' + @tbname
  47. + ' where ' + @colname + ' like ' + '''%' + @string
  48. + '%'''
  49.  
  50. EXEC Sp_executesql
  51. @sql,
  52. N'@i int output',
  53. @i=@j output --输出满足条件表的记录数
  54.  
  55. IF @j > 0
  56. BEGIN
  57. INSERT INTO #temp_table
  58. SELECT @tbname,
  59. @colname
  60. --exec( 'select distinct '+@colname+' from ' +@tbname + ' where '+ @colname+ ' like '+ '''%'+@string+ '%''')
  61. END
  62.  
  63. FETCH next FROM colroy INTO @colname
  64. END
  65.  
  66. CLOSE colroy
  67.  
  68. DEALLOCATE colroy
  69.  
  70. FETCH next FROM tbroy INTO @tbname
  71. END
  72.  
  73. CLOSE tbroy
  74.  
  75. DEALLOCATE tbroy
  76.  
  77. SELECT id,
  78. tbname AS '表名',
  79. colname AS '字段名'
  80. FROM #temp_table
  81.  
  82. IF Object_id('Tempdb..#temp_table') IS NOT NULL--删除临时表
  83. DROP TABLE #temp_table
  84. END
  85.  
  86. go
  87.  
  88. --使用方法
  89. EXEC Search 'a'

查询结果:

    

  1.  

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. Linux虚拟机添加新硬盘的全程图解

    查看网的文章,我将在vm虚拟机LinuxRedhat中添加一个新的硬盘, 过程大致如下: 1.选择"VM"----"setting"并打开,将光标定位在hard ...

  2. 当年只会C# 所以写C++就成这样了!

    这应该是4-5年前了. 当年之会c#敲敲代码也不会C++但深信开发这东西只要思想有了. 只是语法问题. 对于C++这貌似只有大牛才能胜任的,而对于我来说是如此困难. 所以想想办法搞了很多通用类来避免C ...

  3. windows phone 摄像头得到图片是旋转90°

    我上个随笔讲到,windows phone 拍出来的photo如果直接使用是反转了90°的. 研究了很久..终于发现问题.其实..这是使用习惯问题... CameraCaptureUI 得到的phot ...

  4. 初学微信小程序

    最近微信推出了微信小程序,为此我学了几天,基本了解了组件及简单语法,但是今天我自己想要独立写一个demo时,忽然发现难道我的不是微信小程序的语法(我以前是iOS 开发,不用css),而是css样式的设 ...

  5. B窗体继承于A窗体,B启动:问题点

    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; t ...

  6. Android自动化测试 - Robotium之re-sign.jar重签名后安装失败提示Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]解决方案

    问题:在用re-sign.jar重签名apk文件后,显示重签名成功,但在实际安装过程中确提示:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 原因:网上查 ...

  7. VS2008切换设计视图卡死 停止响应

    最近VS2008出现一个问题,打开项目后很快就非常慢,特别是切换设计视图马上卡死,很久也反应不过来.网上找了几种办法,都不好使,有的说是office影响的,有的说要改注册表,都试了一下,还是没用.后来 ...

  8. [转]Travis Ci的最接底气的中文使用教程

    相信大家对Travis Ci已经不再陌生了,Github上已经有大部分的项目已经采用了它. Travis Ci是一个基于晕的持续集成项目,目前已经支持大部分主流语言了,如:C.PHP.Ruby.Pyt ...

  9. List集合特有的迭代器 ListIterator

  10. 快排查找第K小的数

    #include "iostream.h" using namespace std; int findMedian(int *A,int left,int right){ int ...