none
SELECT SYS.TABLES.NAME... (dependências) RRS feed

  • Pergunta

  • Bom dia pessoal!

    Todo desenvolvedor no inicio do desenvolvimento do seu software precisa popular as tabelas com dados fictícios para testes.

    E essa rotina pode ser muito chata e complicada se o banco tiver dezenas de tabelas com dezenas de relacionamentos e dependências. Pra facilitar um grande INSERT inicial no banco, eis minha pergunta:

    Tem alguma forma de listar as tabelas e suas colunas ordenadas pelas dependências?

    SELECT sys.tables.name,  sys.columns.name as coluna
    FROM sys.tables inner join sys.columns
    ON (sys.columns.object_id=sys.tables.object_id)
    ORDER BY ???

    quarta-feira, 29 de março de 2017 12:27

Respostas

Todas as Respostas

  • Talvez você consiga juntando duas queries (talvez gerando uma coluna índice a partir da segunda query e usando no order by). Seguem alguns links sobre como retornar as tabelas ordenadas por sua dependência.

    http://sqlblog.com/blogs/jamie_thomson/archive/2009/09/08/deriving-a-list-of-tables-in-dependency-order.aspx

    http://stackoverflow.com/questions/352176/sqlserver-how-to-sort-table-names-ordered-by-their-foreign-key-dependency


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 29 de março de 2017 12:45
  • select  OBJECT_NAME(k.parent_object_id) as parentTable
              , c1.name as parentColumn
              , OBJECT_NAME(k.referenced_object_id) as referencedTable
              , c2.name as referencedColumn
        from    sys.foreign_keys k
                inner join sys.foreign_key_columns f
                  on  f.parent_object_id = k.parent_object_id
                inner join sys.columns c1
                  on  c1.column_id = f.parent_column_id
                  and c1.object_id = k.parent_object_id
                inner join sys.columns c2
                  on  c2.column_id = f.referenced_column_id
                  and c2.object_id = k.referenced_object_id
    order by k.parent_object_id, c1.name

    Find Column dependency

    Antero Marques
    _______________________________________________________________________________
    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    quarta-feira, 29 de março de 2017 13:07
  • Deleted
    quarta-feira, 29 de março de 2017 13:44
  • Muito bom Antero. Mas vc trouxe apenas as tabelas com dependência. O que eu queria era traser todas as tabelas mas ordenadas de tal maneira que eu pudesse fazer INSERT uma a uma sem ter erros de dependencia.

    Ou seja se tenho uma tabela PAIS com o campo ID_Estado que depende da tabela ESTADO. O SELETC das tabelas tem que traser a tabela Estado antes da tabela PAIS.

    Pra mim saber a ordem em que devo realizar os INSERTs.

    Eu não tenho muita experiencia/facilidade com joins e objtos o banco...então vou precisar de um tempo pra entender essa consulta que vc passou...

    quarta-feira, 29 de março de 2017 14:55
  • Obrigado Juliano! É isso mesmo o link da Stackoverflow é praticamente o que eu quero.

    Mas como eu não tenho muita experiencia/facilidade com joins e objtos o banco...então vou precisar de um tempo pra entender essa consulta e poder personalizar

    quarta-feira, 29 de março de 2017 14:57