verificar se uma PK já existe em uma outra tabela do banco como FK

19/12/2015

Como verificar se uma PK já existe em uma outra tabela do banco como FK.

Vou habilitar a edição apenas quando a PK ainda não foi utilizada.

Desde já agradeço...

Mario Jr

Respostas

19/12/2015

Jothaz

Sinceramente não entende o que você quer!

Como assim "habilitar a edição apenas quando a PK ainda não foi utilizada"?
Responder Citar

19/12/2015

Mario Jr

Jothaz exemplo:

Só vou deixar editar um registro da tabela "produto" se este registro não foi utilizado ainda na tabela de "venda".
Responder Citar

20/12/2015

Marcos P

Qual Banco de dados ?

Você precisa de uma solução genérica ( a partir de qualquer tabela da base ) ou específica ( como no caso a colocou acima ) ?
Responder Citar

20/12/2015

Mario Jr

Seria uma solução genérica.

Digamos por exemplo que a PK da tabela "Produto" seja a FK de varias tabelas. Ou seja não posso fazer "Select VendaId FROM Venda WHERE ProdutoId = Id" ... Entende....

Preciso de uma solução que verifique se o ProdutoId existe em varias tabelas.



Atenciosamente.
Responder Citar

20/12/2015

Marcos P

Qual banco ?
Responder Citar

22/12/2015

Mario Jr

Sql Server
Responder Citar

22/12/2015

Marcos P

Vou preparar algo e retorno na sequencia...

Ok ?!?
Responder Citar

28/12/2015

Marcos P

Assumindo que o controle de integridade referencial é feito do lado do banco de dados (via relações x constraints ), podemos fazer :

declare @NomeTabelaPK        varchar(50)
SET @NomeTabelaPK = 'Employees'                      --<<< indique AQUI o nome da tabela

set nocount on

declare @IDTabelaPK_rkeyid   bigint

set @IDTabelaPK_rkeyid = (select id from sysobjects where xtype = 'U' and name = @NomeTabelaPK)

print 'Tabela PK ( Nome ): ' + @NomeTabelaPK
print '-------------------------------------------------------------------------------------------------------------------------------------------------------'

if (@IDTabelaPK_rkeyid is not null)
begin 
   print ''
   print 'Chaves estrangeiras relacionadas à chave primária da tabela'   
   select substring(colPK.Name,1,50) as ColunaPK, substring(tabFK.Name,1,50) as TabelaFK, substring(colFK.Name,1,50) as ColunaFK
   from sysforeignkeys FK inner join syscolumns colPK on (colPK.id = FK.rkeyid and colPK.colid = FK.rkey)
                          inner join sysobjects tabFK on (tabFK.id = FK.fkeyid) 
                          inner join syscolumns colFK on (colFK.id = FK.fkeyid and colFK.colid = FK.fkey)
   where FK.rkeyid = @IDTabelaPK_rkeyid   
end
else
   print '> Tabela não existe... Processo Finalizado !'

set nocount off

Não testei com chaves primárias compostas, mas acredito que deva funcionar...

Ok ?!?
Responder Citar

28/12/2015

Mario Jr

Ok. Obrigado pelo retorno...
Responder Citar