OVH Cloud OVH Cloud

Suppression multiple

3 réponses
Avatar
Julien Cheyssial
Bonjour à tous,

J'ai quelques difficultés pour construire une requête T-SQL, qui sera
triviale pour vous je pense :

3 Tables :
- COMPANY : COMPANY_ID, COMPANY_NAME
- DEPARTMENT : DEPARTMENT_ID, COMPANY_ID, DEPARTMENT_NAME
- EMPLOYEE : EMPLOYEE_ID, DEPARTMENT_ID, EMPLOYEE_NAME

Une COMPANY a plusieurs DEPARTMENT, qui peuvent avoir plusieurs EMPLOYEE.
Simple non ?
Lorsque je supprime une COMPANY, je veux que ca supprime tous les DEPARTMENT
liés, ainsi que l'ensemble des EMPLOYEE liés aux DEPARTMENT. No problem,
pour supprimer la COMPANY et les DEPARTMENT liés, mais pour les EMPLOYEE,
j'ai un peu de mal. J'aimerai faire ca :

DELETE FROM EMPLOYEE
WHERE DEPARTMENT_ID = (SELECT DEPARTMENT_ID WHERE WHERE COMPANY_ID =
@COMPANY_ID)

DELETE FROM DEPARTMENT
WHERE COMPANY_ID = @COMPANY_ID

DELETE FROM COMPANY
WHERE COMPANY_ID = @COMPANY_ID

Qu'est-ce qui cloche ?

Thanks

Julien C.

3 réponses

Avatar
Xavier Pillons
Julien,

Pourquoi ne pas utiliser les contraintes intégrées, elles permettent
typiquement de gérer cela automatiquement.

--
Xavier Pillons
Microsoft Services


"Julien Cheyssial" wrote in message
news:u1%23oY0J$
Bonjour à tous,

J'ai quelques difficultés pour construire une requête T-SQL, qui sera
triviale pour vous je pense :

3 Tables :
- COMPANY : COMPANY_ID, COMPANY_NAME
- DEPARTMENT : DEPARTMENT_ID, COMPANY_ID, DEPARTMENT_NAME
- EMPLOYEE : EMPLOYEE_ID, DEPARTMENT_ID, EMPLOYEE_NAME

Une COMPANY a plusieurs DEPARTMENT, qui peuvent avoir plusieurs EMPLOYEE.
Simple non ?
Lorsque je supprime une COMPANY, je veux que ca supprime tous les


DEPARTMENT
liés, ainsi que l'ensemble des EMPLOYEE liés aux DEPARTMENT. No problem,
pour supprimer la COMPANY et les DEPARTMENT liés, mais pour les EMPLOYEE,
j'ai un peu de mal. J'aimerai faire ca :

DELETE FROM EMPLOYEE
WHERE DEPARTMENT_ID = (SELECT DEPARTMENT_ID WHERE WHERE COMPANY_ID > @COMPANY_ID)

DELETE FROM DEPARTMENT
WHERE COMPANY_ID = @COMPANY_ID

DELETE FROM COMPANY
WHERE COMPANY_ID = @COMPANY_ID

Qu'est-ce qui cloche ?

Thanks

Julien C.




Avatar
TINANT Hervé \(alias CrazyHT\)
DELETE FROM EMPLOYEE
WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID WHERE WHERE COMPANY_ID @COMPANY_ID)

ca devrait suffir :)


--
Cordialment,

TINANT Hervé (Alias CrazyHT)
MVP Visual C#.NET
http://www.csharpfr.com



"Julien Cheyssial" a écrit dans le message de
news:u1%23oY0J$
Bonjour à tous,

J'ai quelques difficultés pour construire une requête T-SQL, qui sera
triviale pour vous je pense :

3 Tables :
- COMPANY : COMPANY_ID, COMPANY_NAME
- DEPARTMENT : DEPARTMENT_ID, COMPANY_ID, DEPARTMENT_NAME
- EMPLOYEE : EMPLOYEE_ID, DEPARTMENT_ID, EMPLOYEE_NAME

Une COMPANY a plusieurs DEPARTMENT, qui peuvent avoir plusieurs EMPLOYEE.
Simple non ?
Lorsque je supprime une COMPANY, je veux que ca supprime tous les


DEPARTMENT
liés, ainsi que l'ensemble des EMPLOYEE liés aux DEPARTMENT. No problem,
pour supprimer la COMPANY et les DEPARTMENT liés, mais pour les EMPLOYEE,
j'ai un peu de mal. J'aimerai faire ca :

DELETE FROM EMPLOYEE
WHERE DEPARTMENT_ID = (SELECT DEPARTMENT_ID WHERE WHERE COMPANY_ID > @COMPANY_ID)

DELETE FROM DEPARTMENT
WHERE COMPANY_ID = @COMPANY_ID

DELETE FROM COMPANY
WHERE COMPANY_ID = @COMPANY_ID

Qu'est-ce qui cloche ?

Thanks

Julien C.




Avatar
Fred BROUARD
Le mieux est de mettre tout cela dans une procédure stockée
transactionnées comme ceci :

************************

CREATE PROCEDURE SP_DELETE_COMPANY
@CPN_ID INTEGER
AS

BEGIN TRANSACTION

DELETE FROM EMPLOYEE
WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID
FROM DEPARTMENT
WHERE COMPANY_ID = @CPN_ID)
IF @@ERROR <> 0
GOTO LBL_ERROR

DELETE FROM DEPARTMENT
WHERE COMPANY_ID = @CPN_ID
IF @@ERROR <> 0
GOTO LBL_ERROR

DELETE FROM COMPANY
WHERE COMPANY_ID = @CPN_ID
IF @@ERROR <> 0
GOTO LBL_ERROR

COMMIT TRANSACTION
RETURN

LBL_ERROR:

ROLLBACK TRANSACTION

************************

Pour appeller la procédure :

SP_DELETE_COMPANY 23

C'est tout !

A +

Julien Cheyssial a écrit:
Bonjour à tous,

J'ai quelques difficultés pour construire une requête T-SQL, qui sera
triviale pour vous je pense :

3 Tables :
- COMPANY : COMPANY_ID, COMPANY_NAME
- DEPARTMENT : DEPARTMENT_ID, COMPANY_ID, DEPARTMENT_NAME
- EMPLOYEE : EMPLOYEE_ID, DEPARTMENT_ID, EMPLOYEE_NAME

Une COMPANY a plusieurs DEPARTMENT, qui peuvent avoir plusieurs EMPLOYEE.
Simple non ?
Lorsque je supprime une COMPANY, je veux que ca supprime tous les DEPARTMENT
liés, ainsi que l'ensemble des EMPLOYEE liés aux DEPARTMENT. No problem,
pour supprimer la COMPANY et les DEPARTMENT liés, mais pour les EMPLOYEE,
j'ai un peu de mal. J'aimerai faire ca :

DELETE FROM EMPLOYEE
WHERE DEPARTMENT_ID = (SELECT DEPARTMENT_ID WHERE WHERE COMPANY_ID > @COMPANY_ID)

DELETE FROM DEPARTMENT
WHERE COMPANY_ID = @COMPANY_ID

DELETE FROM COMPANY
WHERE COMPANY_ID = @COMPANY_ID

Qu'est-ce qui cloche ?

Thanks

Julien C.





--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************