SQLSERVER查詢整個數據庫中某個特定值所在的表和字段的方法


      這幾天有業務部門需要使用一個SAP B1老系統  中的報表,但是由於此報表沒有加時間條件,導致一旦開始查詢 就會導致B1系統異常退出。由於報表對應的SQL 是存在數據庫中,所以想通過查找到這個報表的SQL,然后給SQL加時間條件的方式來處理(多年前的一個報表,不知道內部邏輯,很難重寫)。 

     但是苦於不清楚報表相關的表結構,不知道報表的存儲位置,但只知道報表的名稱 又陷入了不知道下一步該怎么處理的窘境。於是又開始大膽猜想,是不是有什么方法 可以根據數據的關鍵詞 查詢數據所在的表名呢?於是開始百度各種資料,證明 思路是可以行得通的,大致思路就是遍歷每一個表的每一個字段 查詢此字段是否包含關鍵詞 。最終查到這篇文章寫的方法 很不錯,和大家分享下,同時也感謝博主的分享。https://blog.csdn.net/zengcong2013/article/details/55264202

 

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]  '倉庫轉儲申請單'

 查詢出來的結果如下:

完美解決我的問題,再次感謝博主的分享 踏雪無痕

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM