Array
(
)

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

Mario Jr
   - 19 dez 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...

Jothaz
   - 19 dez 2015

Sinceramente não entende o que você quer!

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

Mario Jr
   - 19 dez 2015

Jothaz exemplo:

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

Marcos P
   - 20 dez 2015

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 ) ?

Mario Jr
   - 20 dez 2015

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.

Marcos P
   - 20 dez 2015

Qual banco ?

Mario Jr
   - 22 dez 2015

Sql Server

Marcos P
   - 22 dez 2015

Vou preparar algo e retorno na sequencia...

Ok ?!?

Marcos P
   - 28 dez 2015

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

#Código

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 ?!?

Mario Jr
   - 28 dez 2015

Ok. Obrigado pelo retorno...