玉祥平台客服-15087858732

标题: SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法 [打印本页]

作者: fteair    时间: 2020-2-23 17:38
标题: SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
这几天有业务部门需要使用一个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  '仓库转储申请单'


作者: fteair    时间: 2020-2-26 17:23

作者: fteair    时间: 2020-2-26 17:24

作者: fteair    时间: 2020-2-27 17:34

作者: fteair    时间: 2020-2-27 17:34

作者: fteair    时间: 2020-2-28 17:47

作者: fteair    时间: 2020-2-28 17:47





欢迎光临 玉祥平台客服-15087858732 (http://bbs.delit.cn/) Powered by Discuz! X3.2