Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Busca em todas as tabelas do banco

É possivel fazer uma busca em todas as tabelas do banco de um nome especifico? (ms sql)

4 respostas

Boa noite Bruno!

Você gostaria de buscar todas as tabelas que cotenham um nome específico ou que contenham registros com nomes específicos? Poderia me esclarecer melhor a sua dúvida?

No aguardo!

Atenciosamente, Nicholas Góes

To buscando um nome de cliente que esta errado e espalhado pelo banco em tabelas q não sei quais , preciso saber em quais tabelas contam.

Ai depois preciso corrigir os registros para outro nome depois para o correto com um simples update .

nome de cliente acredito que deve ter apenas em uma tabela, esse sql tras todas as tabelas do banco por tamanho

SELECT t.NAME AS Entidade, p.rows AS Registros, SUM(a.total_pages) * 8 AS EspacoTotalKB, SUM(a.used_pages) * 8 AS EspacoUsadoKB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS EspacoNaoUsadoKB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY Registros DESC

solução!

Bruno, boa noite!

Então, como você está procurando por um registro em sí dentre as tabelas do banco de dados, não há nenhuma maneira nativa de se fazer essa operação. Entretanto, você pode criar um script para percorrer as tabelas do banco de dados e executar a consulta nas colunas das mesmas. Ressalto que essa operação será complexa e depependendo do volume de informações e da quantidade de objetos no servidor a operação poderá demorar muito e consumir significativamente o recurso do servidor.

Você pode criar o script baseado na query abaixo

SELECT o.name AS tabela, c.name AS coluna, t.name AS tipo
FROM   sys.objects AS o WITH ( NOLOCK )
       INNER JOIN sys.columns AS c WITH ( NOLOCK )
           ON c.object_id = o.object_id
       INNER JOIN sys.types AS t WITH ( NOLOCK )
           ON t.system_type_id = c.system_type_id
              AND c.system_type_id IN ( 175, 167, 35 )
WHERE  o.type = 'U'

Atenciosamente, Nicholas Góes.