none
Buscar identificador en tablas RRS feed

  • Pregunta

  • Estimados.

    Tengo un identificador digamos el 1234 en distintos campos (No todos los campos se llaman igual).

    Necesito buscar dicho datos en todas las tablas y columnas de una BD


    DBA SQL Server Santiago/Chile


    • Editado CMAPM viernes, 31 de agosto de 2018 0:09
    viernes, 31 de agosto de 2018 0:09

Respuestas

  • Hola CMAPM:

    Puedes trabajar en algo de este estilo:

    CREATE DATABASE [EJEMPLO2];
    GO
    USE [EJEMPLO2];
    GO
    CREATE TABLE TABLA1
    (ID   INT IDENTITY(1, 1),
     COL1 VARCHAR(1000),
     COL2 INT,
     COL3 NVARCHAR(400),
     COL4 DATE
    );
    GO
    CREATE TABLE TABLA2
    (ID   INT IDENTITY(1, 1),
     COL1 VARCHAR(1000),
     COL2 INT,
     COL3 NVARCHAR(400),
     COL4 DATE
    );
    GO
    CREATE TABLE TABLA3
    (ID   INT IDENTITY(1, 1),
     COL1 VARCHAR(1000),
     COL2 INT,
     COL3 NVARCHAR(400),
     COL4 DATE
    );
    GO
    INSERT INTO TABLA1
    (COL1,
     COL2,
     COL3,
     COL4
    )
    VALUES
    ('EJEMPLO',
     123456,
     N'EJEMPLO',
     '20180801'
    ),
    ('EJEMPLO',
     0,
     N'EJEMPLO',
     '20180801'
    ),
    ('EJ123456EE',
     0,
     N'EJEMPLO',
     '20180801'
    );
    GO
    INSERT INTO TABLA2
    (COL1,
     COL2,
     COL3,
     COL4
    )
    VALUES
    ('EJEMPLO',
     0,
     N'EJEMPLO',
     '20180801'
    ),
    ('EJEMPLO',
     0,
     N'EJEMPLO',
     '20180801'
    ),
    ('EJEE',
     0,
     N'EJEMPLO',
     '20180801'
    );
    GO
    INSERT INTO TABLA3
    (COL1,
     COL2,
     COL3,
     COL4
    )
    VALUES
    ('EJEMPLO',
     0,
     N'EJEMPLO',
     '20180801'
    ),
    ('EJEMPLO',
     0,
     N'EJE123456MPLO',
     '20180801'
    ),
    ('EJ123456EE',
     0,
     N'EJEMPLO',
     '20180801'
    );
    GO
    SELECT *
    FROM TABLA1;
    SELECT *
    FROM TABLA2;
    SELECT *
    FROM TABLA3;
    GO
    
    
    DECLARE @name NVARCHAR(MAX);
    DECLARE @columname NVARCHAR(MAX);
    DECLARE @datatype NVARCHAR(MAX);
    DECLARE @resultadofinal VARCHAR(2000);
    DECLARE @sentencia NVARCHAR(4000);
    DECLARE @campo VARCHAR(20)= 'fotos';
    DECLARE @cuantos INT;
    DECLARE @paramdefinition NVARCHAR(500)= N'@nombre nvarchar(200), @cuantosout int output';
    DECLARE micursor CURSOR
    FOR SELECT t.name,
               s.column_name,
               s.data_type
        FROM information_schema.columns s
             INNER JOIN sys.tables t ON t.name = s.table_name
        ORDER BY t.name;
    OPEN micursor;
    FETCH micursor INTO @name, @columname, @datatype;
    WHILE(@@fetch_status = 0)
        BEGIN
            SET @cuantos = 0;
            BEGIN TRY
                SET @sentencia = 'select @cuantosout = count(*) from [ejemplo2].dbo.['+@name+'] where cast('+@columname+' as nvarchar(4000)) like N''%1234%''; ';
                EXEC sp_executesql
                     @sentencia,
                     @paramdefinition,
                     @name,
                     @cuantosout = @cuantos OUTPUT;
                IF(@cuantos > 0)
                    BEGIN
                        PRINT @name;
                        PRINT @columname;
                        PRINT @datatype;
                        PRINT @cuantos;
                    END;
            END TRY
            BEGIN CATCH
    	
    /* tratamiento de excepciones */
    
            END CATCH;
            FETCH micursor INTO @name, @columname, @datatype;
        END;
    CLOSE micursor;
    DEALLOCATE micursor;
    
    Un saludo

    viernes, 31 de agosto de 2018 5:58