Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mibimax

[Resolvido] Deletar 1 registro (usuario) em 3 tabelas

Recommended Posts

Pessoal, sou iniciante e gostaria de algumas dicas e exemplos, segue:

 

Obejetivo é excluir um usuário em 3 tabelas, pegando a informação do campo StSitucao de outra tabela UsuarioTeste TEMPORARIA

 

Tabelas: Relação N p/ N nas 3 tabelas

- Usuario

- GrupoUsuarioXLogin

- Login

 

Não posso ALTERAR a estrutura nem usar o DELETE CASCADE para DELETAR o usuário que foi demitido.

 

Criei Tabela Temporaria

Tabela: UsuarioTeste

Campos: Usu_Codigo, Usu_Nome, Usu_Cpf e StSituacao

 

Inserir dois registros na nova tabela

Usu_codigo Usu_nome Usu_cpf StSituacao

--------- ---------- ----------------- --------

1 Fulano 11.111.111/1111-11 A

2 Silva 22.222.222/222-22 I

2 Joao 22.222.222/222-22 A

 

 

 

O campo Usu_Situacao TEM duas situacões:

1) A -> Ativo

2) I -> Inativo, ou seja, foi demitido

 

 

Quando o campo Usu_Situacao estiver com o registro/situação igual a I da tabela UsuarioTeste, isto indica que o usuário tem que ser EXCLUÍDO nas 3 TABELAS abaixo.

 

Citação:

- Usuario

- GrupoUsuarioXLogin

- login

 

 

Iniciei este script via dica de outro forum

 

 

DECLARE @CDUSUARIO INT

 

SET @CDUSUARIO = 1

 

DELETE USUARIO

WHERE CDUSUARIO = @CDUSUARIO

 

DELETE GrupoUsuarioXLogin

WHERE CDUSUARIO = @CDUSUARIO

 

DELETE login

WHERE CDUSUARIO = @CDUSUARIO

 

Qual sugestão para excluir usuario demitido tendo a informação na tabela UsuarioTeste no campo StSituacao igual a I

 

 

Grato

Sérgio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro Cerqueira , grato pelo retorno, não respondi antes visto que to sem NET em casa no momento

 

Pode ser um cursor ou procedure ou apenas um script que deleta USUARIO DEMITIDOS, como estou iniciando pode ser um script simples para entender e melhora-lo com o tempo

 

Você tem algum exemplo para EXECUTAR esta rotina

 

Grato

Sérgio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu usuaria um cursor.

De uma olhada neste topico:

 

http://forum.imasters.com.br/index.php...2&hl=cursor

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

na minha opinião eu acho que você não deve Deletar

 

você deve Ocultar o campo tipo

 

 

crie um campo Del que seja igua a 0 ou 1

 

1 = excluido

 

0 = não excluido

 

quando você for fazer um select você usa assim "select * from usuario where del=0" para vir todos os usuarios ativos e "select * from usuario where del=1" para trazer todos os usuarios excluidos

 

espero ter ajudado.. qualquer duvida chama nois..

 

att

 

Dário Tavares

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha ai Sergio um exemplo de uma procedure

 

 

fiz meio rapidão aqui pode ser que falta ponto e virugula ou algo. ou declarar variavel mais acho que não

mais so para você ter uma ideia

 

 

CREATE PROCEDURE SP_DELETA

( @CDUSUARIO INT,@OPERACAO CHAR(1)

)

AS

BEGIN

 

--so para oculta como te falei

 

IF @OPERACAO = 'I' BEGIN

UPDATE USUSARIO SET DEL=1 WHERE CDUSUARIO = @CDUSUARIO

UPDATE GrupoUsuarioXLogin SET DEL=1 WHERE CDUSUARIO = @CDUSUARIO

UPDATE login SET DEL=1 WHERE CDUSUARIO = @CDUSUARIO

END

 

 

--NO CASO você queira deletar mesmo

/*

 

IF @OPERACAO = 'I' BEGIN

 

DELETE USUARIO

WHERE CDUSUARIO = @CDUSUARIO

 

DELETE GrupoUsuarioXLogin

WHERE CDUSUARIO = @CDUSUARIO

 

DELETE login

WHERE CDUSUARIO = @CDUSUARIO

END

 

 

*/

 

 

END

GO

 

att

 

Dáro Tavares

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dario, obrigado pelo retorno.

 

 

Não posso ALTERAR a estrutura das tabelas abaixo nem usar Update/Insert nem DELETE CASCADE para DELETAR o usuário que foi demitido

- Usuario 
- GrupoUsuarioXLogin 
- Login

Acredito que criando tabela TEMPORARIA com o campo CDSITUACAO igual a I ai tem que excluir o usuário demitido nas tabelas Usuario, GrupoUsuarioXLogin e Login.

 

Pela sua idéia, posso alterar o TIPO para INT o campo CDSITUACAO na tabela UsuarioTeste, assim a "select * from usuario where del=0" para vir todos os usuarios ativos e "select * from usuario where del=1" para trazer todos os usuarios excluidos.

 

Sobre procedure como estou iniciando tenho que estudas e aprender mais.

 

Grato

Sérgio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido

 

Após algumas dicas, criei um cursor que revolve o problema, segue solução.

 

 

declare csDelUsu cursor for select cdUsuario from Usuario_TMP where StUsuario = 'I'

 

declare @XcdUsuario int

 

 

open csDelUsu

FETCH NEXT FROM csDelUsu INTO @XcdUsuario

while @@FETCH_status <> -1

begin

delete Usuario_TMP where cdUsuario = @XcdUsuario

delete login_TMP where cdUsuario = @XcdUsuario

delete GrupoUsuarioXLogin_TMP where cdUsuario = @XcdUsuario

 

FETCH NEXT FROM csDelUsu INTO @XcdUsuario

end

close csDelUsu

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.