Array
(
)

Qual Melhor Forma Para Deletar USUARIO em 3 tabelas

Mibimax
   - 14 abr 2009

Pessoal,

Preciso criar um mecanismo para DELETAR usuário assim que o mesmo for demetido da empresa.

Banco: sql server 2000

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

Tem o CAMPO ´cdusuario´ nas 3 tabelas.

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

#Código

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

Ara.es
   - 15 abr 2009

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

Mibimax
   - 15 abr 2009

ara.es obrigado pela retorno

Você tem algum exemplo DELETE CASCADE?
#Código

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

Tabela Temporaria: UsuarioDemitido
- cdusuario
- nome
- cpf
- Ativo: N ou S

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

Mibimax
   - 23 abr 2009

#Código

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

Ara.es
   - 23 abr 2009

mibimax, vc pode ter um script assim:

#Código

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

Mibimax
   - 24 abr 2009

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

Criei NOVA Tabela

Tabela: UsuarioTeste
Campos: Usu_Codigo, Usu_Nome, Usu_Cpf e Usu_Situacao

Inserir dois registros na nova tabela

#Código

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


O campo Usu_Situacao TEM duas situacões:
1) A -> Ativo
2) I -> Inativo, ou seja, foi demitido

Real necessidade

Quando o campo Usu_Situacao estiver com o registro/situação igual a #Código
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

Mibimax
   - 20 mai 2009

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