度量快速开发平台-专业、快速的软件定制快开平台
标题: SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法 [打印本页]
作者: fteair 时间: 2020-2-23 17:38
标题: SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
这几天有业务部门需要使用一个SAP B1老系统 中的报表,但是由于此报表没有加时间条件,导致一旦开始查询 就会导致B1系统异常退出。由于报表对应的SQL 是存在数据库中,所以想通过查找到这个报表的SQL,然后给SQL加时间条件的方式来处理(多年前的一个报表,不知道内部逻辑,很难重写)。
- CREATE PROCEDURE [dbo].[SP_FindValueInDB]
- (
- @value VARCHAR(1024)
- )
- AS
- BEGIN
- SET NOCOUNT ON;
- DECLARE @sql VARCHAR(1024)
- DECLARE @table VARCHAR(64)
- DECLARE @column VARCHAR(64)
- CREATE TABLE #t (
- tablename VARCHAR(64),
- columnname VARCHAR(64)
- )
- DECLARE TABLES CURSOR FOR
- SELECT o.name, c.name FROM syscolumns c
- INNER JOIN sysobjects o ON c.id = o.id
- WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)
- ORDER BY o.name, c.name
- OPEN TABLES
- FETCH NEXT FROM TABLES
- INTO @table, @column
- WHILE @@FETCH_STATUS = 0
- BEGIN
- SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] '
- SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') '
- SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', '''
- SET @sql = @sql + @column + ''')'
- EXEC(@sql)
- FETCH NEXT FROM TABLES
- INTO @table, @column
- END
- CLOSE TABLES
- DEALLOCATE TABLES
- SELECT * FROM #t
- DROP TABLE #t
- 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
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) |
Powered by Discuz! X3.2 |