Pergunta

Eu preciso de uma consulta para o SQL Server 2000 para obter uma lista de todas as chaves estrangeiras.

Particularmente todas as chaves estrangeiras que apontam para uma determinada coluna.

Como faço para escrever essa consulta?

Foi útil?

Solução

select * from sysobjects
where xtype = 'F'

Isso deve fazer o truque e ser compatível com SQL Server 2000, eu espero!

Se precisar, adicionalmente, as informações da tabela e coluna em SQL Server 2000, ele fica um pouco mais envolvidos; você precisa para se juntar aos sysforeignkeys e syscolumns exibições do catálogo assim:

select
  so.name 'foreign key name',
  OBJECT_NAME(parent_obj) 'table',
  OBJECT_NAME(sf.fkeyid) 'referencing table',
  sc1.name 'referencing column',
  OBJECT_NAME(sf.rkeyid) 'referenced table',
  sc2.name 'referenced column'
from sysobjects so
inner join sysforeignkeys sf on so.id = sf.constid
inner join syscolumns sc1 on sf.fkeyid = sc1.id and sf.fkey = sc1.colid
inner join syscolumns sc2 on sf.rkeyid = sc2.id and sf.fkey = sc2.colid
where so.xtype in ('F','PK')

E se você quiser aproveitar as vistas INFORMATION_SCHEMA que são, de facto disponível em SQL Server 2000, use esta consulta:

SELECT
    rc.CONSTRAINT_NAME,     
    rcu.TABLE_NAME 'Referencing Table', 
    rcu.COLUMN_NAME 'Referencing Column',
    rcu1.TABLE_NAME 'Referenced Table',
    rcu1.COLUMN_NAME 'Referenced Column'
FROM
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
INNER JOIN 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu 
      ON rc.CONSTRAINT_CATALOG = rcu.CONSTRAINT_CATALOG 
         AND rc.CONSTRAINT_NAME = rcu.CONSTRAINT_NAME
INNER JOIN 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu1 
      ON rc.UNIQUE_CONSTRAINT_CATALOG = rcu1.CONSTRAINT_CATALOG 
         AND rc.UNIQUE_CONSTRAINT_NAME = rcu1.CONSTRAINT_NAME

Marc

Outras dicas

select * from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

Se precisar de mais informações sobre a chave, então você pode juntá-lo à vista INFORMATION_SCHEMA.KEY_COLUMN_USAGE, que contém as colunas referenciadas pela chave.

olhar para a fonte de sp_helpconstraint para mais idéias, mas isso deve funcionar ...

para obter cada FK que se refere a tabela de destino e coluna

  • substituir "YourTableName"
  • uncomment o último "E" e defina seu nome coluna de destino

código:

--list all tables & columns that refer to the given table
select
    k.name,pt.Name AS ParentTable,pc.name,c.constraint_column_id,ct.Name AS ReferedToTable,c.referenced_column_id,cc.Name
    from sys.foreign_keys                  k
        INNER JOIN sys.foreign_key_columns c ON k.parent_object_id=c.parent_object_id
        INNER JOIN sys.objects             pt ON c.parent_object_id=pt.object_ID
        INNER JOIN sys.objects             ct ON c.referenced_object_id=ct.object_ID
        INNER JOIN  sys.columns            pc ON c.parent_object_id=pc.object_ID AND c.parent_column_id=pc.column_id
        INNER JOIN  sys.columns            cc ON c.referenced_object_id=cc.object_ID AND c.referenced_column_id=cc.column_id
    where k.referenced_object_id = object_id('YourTableName')
        --AND pc.name='YourColumnName' --parent table column name
        --AND cc.name='YourColumnName' --referenced table's column name
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top