quinta-feira, 11 de setembro de 2014

SUPER QUERY a ressurreição....

Eu resgatei o script da SUPER QUERY e adaptei a fim de listar informações mais completas sobre os registros encontrados. Basicamente, a coluna enumera pk a partir da tabela que contém o valor procurado, juntamente com o valor de pk, nome da tabela e columnn onde o valor procurado foi encontrado.

Este procedimento "SUPER QUERY" é restrito a um esquema especifico chamado 'global', mas você pode mudar isso, alterando esta linha:

AND Schema_name(schema_id) = 'Global'  

Segue a query completa
/*
para executar a proc...


EXEC spSearchGlobal @search_string='Domain1'
*/

ALTER PROCEDURE Spsearchglobal(@search_string VARCHAR)
AS
  BEGIN
      DECLARE @table_name  SYSNAME,
              @table_id    INT,
              @column_name SYSNAME,
              @id          VARCHAR(100),
              @sql_string  VARCHAR(2000)

      CREATE TABLE ##superquery
        (
           id     VARCHAR(100),
           pk     VARCHAR(100),
           tabela VARCHAR(100),
           coluna VARCHAR(100)
        )

      DECLARE tables_cur CURSOR FOR
        SELECT name,
               object_id
        FROM   sys.tables
        WHERE  type = 'U'
               AND Schema_name(schema_id) = 'Global'

      OPEN tables_cur

      FETCH next FROM tables_cur INTO @table_name, @table_id

      WHILE ( @@FETCH_STATUS = 0 )
        BEGIN
            DECLARE columns_cur CURSOR FOR
              SELECT name
              FROM   sys.columns
              WHERE  object_id = @table_id
                     AND system_type_id IN ( 167, 175, 231, 239 )

            OPEN columns_cur

            FETCH next FROM columns_cur INTO @column_name

            WHILE ( @@FETCH_STATUS = 0 )
              BEGIN
                  SELECT @id = name
                  FROM   sys.columns
                  WHERE  object_id = Object_id('Global.' + @table_name)
                         AND is_identity = 1

                  SET @sql_string =
                  'INSERT INTO ##SuperQuery(id,pk,tabela,coluna) '
                  + 'SELECT ' + Isnull(@id+',', '') + '''' + @id
                  + ''' ' + ',''Global.' + @table_name + ''' ' +
                  ','''
                  + @column_name + ''' ' + ' FROM Global.'
                  + @table_name + ' WHERE ' + @column_name
                  + ' LIKE ''%' + @search_string + '%'' ';

                  PRINT @sql_string

                  EXECUTE(@sql_string)

                  FETCH next FROM columns_cur INTO @column_name
              END

            CLOSE columns_cur

            DEALLOCATE columns_cur

            FETCH next FROM tables_cur INTO @table_name, @table_id
        END

      CLOSE tables_cur

      DEALLOCATE tables_cur

      SELECT *
      FROM   ##superquery

      DROP TABLE ##superquery
  END;  




Check out my new book on MariaDB http://www.amazon.com/dp/B00MQC06HC

Nenhum comentário:

Postar um comentário

Leave your comment here!