这几天有业务部门需要使用一个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 '仓库转储申请单'
|