度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 205|回复: 6

[分享] SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法

[复制链接]

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-2-23 17:38:00 | 显示全部楼层 |阅读模式
这几天有业务部门需要使用一个SAP B1老系统  中的报表,但是由于此报表没有加时间条件,导致一旦开始查询 就会导致B1系统异常退出。由于报表对应的SQL 是存在数据库中,所以想通过查找到这个报表的SQL,然后给SQL加时间条件的方式来处理(多年前的一个报表,不知道内部逻辑,很难重写)。
     但是苦于不清楚报表相关的表结构,不知道报表的存储位置,但只知道报表的名称 又陷入了不知道下一步该怎么处理的窘境。于是又开始大胆猜想,是不是有什么方法 可以根据数据的关键词 查询数据所在的表名呢?于是开始百度各种资料,证明 思路是可以行得通的,大致思路就是遍历每一个表的每一个字段 查询此字段是否包含关键词 。最终查到这篇文章写的方法 很不错,和大家分享下,同时也感谢博主的分享。https://blog.csdn.net/zengcong2013/article/details/55264202
  1. CREATE PROCEDURE [dbo].[SP_FindValueInDB]
  2. (
  3.     @value VARCHAR(1024)
  4. )
  5. AS
  6. BEGIN
  7.     SET NOCOUNT ON;
  8.     DECLARE @sql VARCHAR(1024)
  9.     DECLARE @table VARCHAR(64)
  10.     DECLARE @column VARCHAR(64)
  11.     CREATE TABLE #t (
  12.         tablename VARCHAR(64),
  13.         columnname VARCHAR(64)
  14.     )
  15.     DECLARE TABLES CURSOR FOR
  16.     SELECT o.name, c.name FROM syscolumns c
  17.     INNER JOIN sysobjects o ON c.id = o.id
  18.     WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)
  19.     ORDER BY o.name, c.name
  20.     OPEN TABLES
  21.         FETCH NEXT FROM TABLES
  22.         INTO @table, @column
  23.         WHILE @@FETCH_STATUS = 0
  24.         BEGIN
  25.             SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] '
  26.             SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') '
  27.             SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', '''
  28.             SET @sql = @sql + @column + ''')'
  29.             EXEC(@sql)
  30.             FETCH NEXT FROM TABLES
  31.             INTO @table, @column
  32.         END
  33.     CLOSE TABLES
  34.     DEALLOCATE TABLES
  35.     SELECT * FROM #t
  36.     DROP TABLE #t
  37. End
复制代码
只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名。
exec [SP_FindValueInDB  '仓库转储申请单'

回复

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-2-26 17:23:08 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-2-26 17:24:05 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-2-27 17:34:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-2-27 17:34:44 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-2-28 17:47:24 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
 楼主| 发表于 2018-2-28 17:47:55 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2018-9-20 04:42 , Processed in 0.238986 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表