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

.NET

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

Mario Jr

Curtidas 0

Respostas

Jothaz

Jothaz

19/12/2015

Sinceramente não entende o que você quer!

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

Mario Jr

19/12/2015

Jothaz exemplo:

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

Marcos P

19/12/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 ) ?
GOSTEI 0
Mario Jr

Mario Jr

19/12/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.
GOSTEI 0
Marcos P

Marcos P

19/12/2015

Qual banco ?
GOSTEI 0
Mario Jr

Mario Jr

19/12/2015

Sql Server
GOSTEI 0
Marcos P

Marcos P

19/12/2015

Vou preparar algo e retorno na sequencia...

Ok ?!?
GOSTEI 0
Marcos P

Marcos P

19/12/2015

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 ?!?
GOSTEI 0
Mario Jr

Mario Jr

19/12/2015

Ok. Obrigado pelo retorno...
GOSTEI 0
POSTAR