Qual Melhor Forma Para Deletar USUARIO em 3 tabelas

14/04/2009

0

Pessoal,

[b:5611943585][b]Preciso criar um mecanismo para DELETAR usuário assim que o mesmo for demetido da empresa. [/b:5611943585][/b]

Banco: sql server 2000

Tem 3 tabelas na order abaixo
- GrupoUsuarioXLogin
- Login
- Usuario

Tem o CAMPO ´cdusuario´ nas 3 tabelas.

[u:5611943585][b:5611943585]Pergunta[/b:5611943585][/u:5611943585]
[b:5611943585]Tem como criar um DELETE selecionando as 3 tabelas[/b:5611943585]

Tipo: delete from (select * from GrupoUsuarioXLogin where cdusuario = ´1´  (select * from Login  where cdusuario = ´1´  (select * from Usuario where cdusuario = ´1´)))


Grato
Sérgio Max


Mibimax

Mibimax

Responder

Posts

15/04/2009

Ara.es

mibimax, o que vc pode faze é ter delete cascade, configurado no banco, para as chaves estrangeiras.

Assim quando vc excluir um registro na tabela de Usuario, automaticamente o SQL Server irá excluir os registros relacionados nas tabeas: GrupoUsuarioXLogin e Login.

Qualquer coisa é só postar!! Flw!!


Responder

15/04/2009

Mibimax

[b:c6da56515d]ara.es[/b:c6da56515d] obrigado pela retorno

Você tem algum exemplo [color=red:c6da56515d][b:c6da56515d]DELETE CASCADE?[/b:c6da56515d][/color:c6da56515d]
delete usuario where cdusuario = ´...´
cdusuario -> só irei ter esse dado quando o usuário for excluído da rede

go

select  * from GrupoUsuarioXLogin  where cdusuario = ´...´ 
cdusuario -> só irei ter esse dado quando o usuário for excluído da rede

go

select * from login where cdusuario = ´...´
cdusuario -> só irei ter esse dado quando o usuário for excluído da rede


O administrador da rede TEM um script que irá MARCAR que usuario foi demitido, isto em uma nova tabela que irei criar

[b:c6da56515d]Tabela Temporaria: UsuarioDemitido
- cdusuario
- nome
- cpf
- Ativo: N ou S [/b:c6da56515d]

Vamos supor que o usuário FULANO foi demitido, é executado script do administrador da rede mancando o campo ATIVO para N

O campo ATIVO estando como N ai sim, TEM que deletar o usuario das 3 tabelas.

Não sei se foi claro, mais é mais ou meno isso que tenho que implementar.

Grato


Responder

23/04/2009

Mibimax

ara.es


Grato pelo retorno, mais não posso ALTERAR a estrutura das 3 tabelas

Li alguns exemplos de DELETE CASCADE na net, mais não posso alterar nada nas tabelas GrupoUsuarioXLogin, Login e Usuario

Preciso criar uma rotina para DELETAR um registro nas 3 tabelas, acredito que tem cursor que faça isso ou um comando que simples que atenda.

Alguém sabe ou tem exmplo, estou iniciando minha caminhada no SQL.

Grado
Sérgio


Responder

23/04/2009

Ara.es

mibimax, vc pode ter um script assim:

DECLARE @CDUSUARIO INT

SET @CDUSUARIO = 1

DELETE USUARIO
WHERE  CDUSUARIO = @CDUSUARIO

DELETE GrupoUsuarioXLogin
WHERE  CDUSUARIO = @CDUSUARIO

DELETE login
WHERE  CDUSUARIO = @CDUSUARIO


Lembrando que a variavel @CDUSUARIO vc tem que alterar tipo para o tipo da coluna no seu banco. coloquei INT somente como exemplo. E lembre-se que a ordem dos DELETES vai depender das relações de dependencias entre as tabelas. Qualquer coisa é só postar. Flw!!


Responder

24/04/2009

Mibimax

[b:b8401ba99f]ara.es [/b:b8401ba99f] mais uma vez grato, com seu script tenho outra idéia para implementar/melhorar

Criei NOVA Tabela

[b:b8401ba99f]Tabela: [/b:b8401ba99f]UsuarioTeste
[b:b8401ba99f]Campos: [/b:b8401ba99f]Usu_Codigo, Usu_Nome, Usu_Cpf e Usu_Situacao

[b:b8401ba99f]
Inserir dois registros na nova tabela[/b:b8401ba99f]

Usu_codigo Usu_nome  Usu_cpf                   Usu_Situacao 
---------      ----------    ----------------- ----   -------- 
1               Fulano        11.111.111/1111-11 A
2               Silva          22.222.222/222-22   I


[b:b8401ba99f][color=blue:b8401ba99f]O campo Usu_Situacao TEM duas situacões:[/color:b8401ba99f][/b:b8401ba99f]
1) A -> Ativo
2) I -> Inativo, ou seja, foi demitido
[b:b8401ba99f]
Real necessidade[/b:b8401ba99f]

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

- Usuario
- GrupoUsuarioXLogin
- login

É mais ou menos isso que tenho que implementar, e sei que tenho que estudar muito para aumentar o conhecimento sobre BD´s.

Grato
Sérgio

[/b]


Responder

20/05/2009

Mibimax

Segue solução do problema, fica como exemplo:


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
deallocate csDelUsu


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar