none
Como trazer todas as tabelas que o campo "D_E_L_E_T_" (que tem em todas as tabelas) tenha o mesmo conteudo RRS feed

  • Pergunta

  • Boa tarde,

    Fiz a sentença abaixo para trazer todas as tabelas que tem o campo "D_E_L_E_T_" nelas.

    Porem precisava trazer apenas as tabelas q este campo D_E_L_E_T_ fosse igual a '*'

    Pode me ajudar? 

    DECLARE @column sysname
    SET @column = '%D_E_L_E_T_%'

    SELECT a.name AS COLUNA, 
    b.name AS TABELA
    FROM dbo.syscolumns a 
    JOIN dbo.sysobjects b ON a.id = b.id
    WHERE a.name LIKE @column
    AND b.xtype = 'U'
    ORDER BY tabela



    quarta-feira, 29 de maio de 2019 18:47

Respostas

Todas as Respostas

  • Deleted
    quarta-feira, 29 de maio de 2019 22:03
  • Porem precisava trazer apenas as tabelas q este campo D_E_L_E_T_ fosse igual a '*'

    Mauro, veja se o script “Search for a string in all tables of SQL Server Database” atende ao que você necessita.

    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Bom dia Jose,

    Eu sou iniciante nestas questões de procedure. Vi que minha necessidade é do item 3

    3. To search in a all table

    EXEC SearchTables @Tablenames = '%'

    ,@SearchStr = '%TEST%'

    The above sample searches in all table with string containing TEST.

    Porem nao sei como chama-la

    quinta-feira, 30 de maio de 2019 12:41
  • Deleted
    quinta-feira, 30 de maio de 2019 12:59
  • Eu sou iniciante nestas questões de procedure. Vi que minha necessidade é do item 3
    3. To search in a all table

    Mauro, experimente

        EXECUTE SP_SearchTables @SearchStr= '*' @GenerateSQLOnly=1

    e analise se o código T-SQL gerado corresponde ao que necessita.

    Pensei que tivesse como definir o nome da coluna na execução desse procedimento, mas não há como. Ele vai pesquisar por '*' em todas as colunas de todas as tabelas...

    Pesquisei rapidamente na web por outras soluções mas, por enquanto, todas que encontrei "pesquisam em todas as colunas de todas as tabelas". Se necessário, podemos construir código específico para sua situação.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Realmente nao atendeu, faltou uns parametros, mas depois que coloquei trouxe a sentença de todas as tabelas.

      EXECUTE SP_SearchTables @Tablenames = '', @SearchStr= '*', @GenerateSQLOnly=1

    Se ele me trouxe-se apenas as tabelas que tivesse:

     WHERE [D_E_L_E_T_] = '*'

    Seria top

    quinta-feira, 30 de maio de 2019 13:42
  • Mauro,

    Veja se este exemplo pode te dar um caminho inicial, ele nos permite identificar o mesmo no de coluna em diversas tabelas:

    -- Exemplo 1 --

    Create table #tabelas (Tabela varchar(800)) Create table #Coluna (Coluna varchar(800)) Create table #temp (Tabela varchar(800), Coluna varchar(800)) -- Inserindo todas as tabelas que existem na base em uma temporaria insert into #tabelas select name from sys.sysobjects where xtype = 'U' -- Rodar daqui até o final declare @String varchar(100) declare @tabela varchar(800) declare @coluna varchar(800) Declare @sql varchar(800) -- valor que voce quer encontrar set @String = 'Log' While (select COUNT(*) from #tabelas) > 0 begin set @tabela = (select top 1 tabela from #tabelas) select @tabela insert into #Coluna select SC.name from sys.syscolumns as SC inner join sys.sysobjects as SO on SC.id = SO.id where SO.name = @tabela set @coluna = (select top 1 Coluna from #Coluna) While (select count(*) from #Coluna) > 0 begin set @coluna = (select top 1 Coluna from #Coluna) select @coluna set @sql = 'IF (select COUNT(*) from ' + @tabela + ' where ' + @coluna + ' like ' + char(39) + '%'+ @string + '%'+ char(39) +') > 0 begin insert into #temp select ' + Char(39) + @tabela + char(39) + ','+ Char(39) + @coluna + CHAR(39) + ' end' exec(@SQL) delete from #Coluna where Coluna = @coluna end delete from #tabelas where Tabela = @tabela end select * from #temp

    -- Exemplo 2 --

    create table t1
     (codigo int)
    create table t2
     (codigo int)
    -- Consultando através do relacionamento entre sys.tables e sys.columns --
    select name from sys.tables
    where object_id in (select object_id from sys.columns where name = 'codigo')
    -- Consultando através do relacionamento entre sys.tables e sys.syscolumns --
    select name from sys.tables
    where object_id in (select id from sys.syscolumns where name = 'codigo')


    Acredito que você armazenando os nomes das colunas e tabelas dentro de uma outra tabela, poderá lhe ajudar a buscar os dados desejas, criando um Select dinâmico passando o nome das tabelas durante a execução.

    O que você acha?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 30 de maio de 2019 13:46
  • Deleted
    quinta-feira, 30 de maio de 2019 14:03
  • Boa tarde José,

    Deu certo meu amigo, obrigado

    quinta-feira, 30 de maio de 2019 16:45