Pergunta

Suponha que eu tenha uma tabela chamada Empresas que tem um DepartmentID coluna.Há também um Departaments tabela que tem como Códigodofuncionário coluna.Claro que eu tenho uma tabela de Empregados bem.O problema é que eu queira excluir uma empresa, então, primeiro eu tenho que eliminar todos os empregados de cada departamento e, em seguida, todos os departaments na empresa.Exclusão em cascata não é uma opção, portanto, eu gostaria de usar transações aninhadas.Eu sou novo para o SQL então, eu gostaria de receber sua ajuda.

Foi útil?

Solução

Eu não tenho certeza de por que você precisa de transações aninhadas aqui.Você só precisa de uma transação real:

BEGIN TRAN

DELETE FROM Employee
    FROM Employee
    INNER JOIN Department ON Employee.DepartmentID = Department.DepartmentID
    INNER JOIN Company ON Department.CompanyID = Company.CompanyID
    WHERE Company.CompanyID = @CompanyID

DELETE FROM Department
    FROM Department
    INNER JOIN Company ON Department.CompanyID = Company.CompanyID
    WHERE Company.CompanyID = @CompanyID

DELETE FROM Company
    WHERE Company.CompanyID = @CompanyID

COMMIT TRAN

Nota o casal, que não é um erro, é o correto a sintaxe SQL para executar uma ASSOCIAÇÃO em EXCLUIR.

Cada instrução atômica é, que toda a ELIMINAR será bem sucedida ou falhar, o que não é importante neste caso, pois todo o lote vai ter êxito ou falha.

BTW, eu acho que você tinha seus relacionamentos para trás.O Departamento não teria um Códigodofuncionário, o Trabalhador teria um DepartmentID.

Outras dicas

Eu não estou respondendo a sua pergunta, mas de Chaves estrangeiras. é o caminho a percorrer, por que não é uma opção?

Como para transações aninhadas são eles:

BEGIN
  delete from Employee where departmentId = 1;
  BEGIN
     delete from Department where companyId = 2;
     BEGIN
        delete from Company where companyId = 2;
     END
  END
END

Programaticamente parece diferente, é claro, mas que dependem da plataforma que você está usando

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top