Estou procurando (de preferência) uma instrução SQL que selecione os nomes de tabela/coluna para qualquer tabela com uma chave estrangeira para uma determinada tabela no Sybase. Acho que deveria ser possível de alguma forma com as sys...
tabelas, mas sendo completamente novo no sybase, não consigo entender. Portanto, qualquer ajuda na direção certa é muito apreciada.
Editar: Por uma questão de integridade: SELECT @@VERSION
retorna
'Adaptive Server Enterprise/15.0.3/EBF 17156 ESD#3/P/Sun_svr4/OS 5.8/ase1503/2726/64-bit/FBO/Sex 5 de fevereiro 05:26:23 2010'
Editar 2
Muito obrigado por suas sugestões, especialmente o comentário de Andrew Bickerton . Isso me permitiu construir uma instrução select SQL rudimentar para um ponto de partida para ir mais longe.
Caso alguém se interesse, aqui está:
select
fko.name "Foreign key name",
par.name "Referenced table name",
fk1.name || ' -> ' || pk1.name "Reference 1",
fk2.name || ' -> ' || pk2.name "Reference 2",
fk3.name || ' -> ' || pk3.name "Reference 3",
fk4.name || ' -> ' || pk4.name "Reference 4"
from
sysobjects tab join
sysconstraints con on tab.id = con.tableid join
sysobjects fko on con.constrid = fko.id join
sysreferences ref on con.constrid = ref.constrid join
sysobjects par on par.id = ref.reftabid left join
---- 1. Column
syscolumns fk1 on ref.fokey1 = fk1.colid and
ref.tableid = fk1.id left join
syscolumns pk1 on ref.refkey1 = pk1.colid and
ref.reftabid = pk1.id left join
---- 2. Column
syscolumns fk2 on ref.fokey2 = fk2.colid and
ref.tableid = fk2.id left join
syscolumns pk2 on ref.refkey2 = pk2.colid and
ref.reftabid = pk2.id left join
---- 3. Column
syscolumns fk3 on ref.fokey3 = fk3.colid and
ref.tableid = fk3.id left join
syscolumns pk3 on ref.refkey3 = pk3.colid and
ref.reftabid = pk3.id left join
---- 4. Column
syscolumns fk4 on ref.fokey4 = fk4.colid and
ref.tableid = fk4.id left join
syscolumns pk4 on ref.refkey4 = pk4.colid and
ref.reftabid = pk4.id -- Et cetera...
where
tab.type = 'U' and
tab.name = 'tq84_f' and
fko.type = 'RI'
Já faz um tempo desde que trabalhei no sybase, mas (da memória) o seguinte sql deve apontar na direção certa:
você também pode conferir os livros do sybase online (tabelas do sistema)
Outra abordagem é "sp_depends"
URL do Sybase: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sprocs/html/sprocs/sprocs68.htm
Observe que a abordagem mostrada acima (usando sysconstraints e sysreferences) só funcionará se você tiver restrição referencial. Se você tiver apenas uma chave estrangeira definida, mas sem restrição, não a verá lá. Para obter todas as chaves estrangeiras relacionadas a uma determinada tabela, você pode usar syskeys:
(substitua report pelo nome da sua tabela).
O retorno da primeira coluna é o nome da tabela com uma chave estrangeira apontando para esta tabela. A segunda coluna é a lista de colunas nesta tabela. E as terceiras colunas são os nomes das colunas da lista na tabela de referência.
Portanto, se você tiver uma tabela people_report com uma coluna rep_key, que é uma chave estrangeira para report.key, obterá algo como isto:
Se você estiver procurando apenas pelo nome das tabelas referenciadas, este código ajudará