Imaginem que têm uma base dados ( o mais provável é não precisarem de imaginar porque têm mesmo lol )
em que várias tabelas possuem um campo chamado “data_criacao” e precisam de actualizar esse campo em todas as tabelas mas não sabem sequer que tabelas têm esse campo “data_criacao”.
Vamos por passos.
1º - Script para achar esse campo
    SELECT t.name AS table_name,
    SCHEMA_NAME(schema_idAS schema_name,
    c.name AS column_name
    FROM sys.tables AS t
    INNER JOIN sys.columns c ON t.OBJECT_ID c.OBJECT_ID
    WHERE c.name LIKE ‘%data_criacao%’
   ORDER BY schema_nametable_name;

Este script ira retornar o nome da tabela, o schema e nome da coluna (que terá de ser o nome que vocês pesquisaram :D )

2º Agora que já sabem onde estão ( mas não precisam de saber :) ) vamos a segunda parte.
O script para efectuar o update. 
Usaremos o script acima, com umas pequenas alterações, e vamos guardar o resultado numa variável e depois executamos essa variável
  begin transaction
declare @query varchar(max)
set @query=
SELECT @query=@query+‘update ‘ +t.name+’ set data_criacao=getdate() where data_criacao is null;’
–SCHEMA_NAME(schema_id) AS schema_name,
–c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE ‘%data_criacao%’
ORDER BY t.name;
exec(@query)
–commit

Não esquecer de verificar se esta tudo ok, e executar o commit que esta comentado…
Ter em atenção o tamanho máximo da varchar.. se tiverem muitas tabelas poderá não dar.. dúvido que tenham assim tantas..mas se tiverem insiram o resultado numa tabela temporária e para cada registo façam o exec :)


Qualquer dúvida, sugestão, correcção é só comentar :)
Abraços

Category: Uncategorized  | Tags: , ,