Pb de Delete en SQL avec Jointure

[Résolu]
Signaler
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
-
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
-
Bonjour à tous,

D'abord toutes mes excuses, j'ai déjà posé ce même message dans la section VB, mais n'ayant obtenu aucune réponse, je tente ma chance ici, puisqu'il s'agit d'un problème plus spécifique SQL Server.

Je suis en train de développer un système de recherche par mot-clé pour une application de gestion vidéo. Pour cela j'utilise 2 tables (entre autres):
Une table principale nommé T_KeyWords avec les champs suivants:

KW_ID Integer AutoIncrement PrimaryKey
KW_WORD Varcher(25) n'accepte pas les nuls

Une 2ème table répertorie les seuls mot-clés pour une vidéo précisée, nommé T_Video_Related avec les champs suivants:
KWR_ID Integer AutoIncrement PrimaryKey
KWR_KWID ID de la Table principale
KWR_VIDEO_ID (l'ID repris de ma table principale vidéo qui comprend entre autres les titres).

J'ai 2 requêtes SQL, la 1ère porte sur la table principale et est un simple SELECT ALL.
La seconde sur la table T_Video_Related que voici:
Code :

CREATE PROCEDURE [BH_SP_SEL_KEYWORDS]

@VIDEO_ID AS INTEGER

AS

BEGIN

SELECT KR.*, K.KW_WORD
FROM T_Keywords_Related AS KR
LEFT JOIN T_Keywords AS K ON KR.KWR_KW_ID = K.KW_ID
WHERE KR.KWR_REC_ID = @VIDEO_ID
ORDER BY K.KW_WORD

END
GO



les 2 requêtes sont affichés chacun dans un DataGrid tout simple et là, aucun problème. Celui-ci arrive quand je veux supprimer un mot clé dans la seule table T_Keywords_Related.
Je le fais comme suit: myRecordset.Delete
ce qui supprime effectivement le mot-clé de la table Related MAIS AUSSI de la table principale, ce que je ne veux pas.

1° question: Peut-être y a t'il une autre façon d'écrire ma requête (j'ai essayé avec un RIGHT JOIN avec et sans intervertir les 2 membres de la relation qui suit, mais sans succès).
2)question: J'avais vu et utilisé une option SQL pure qui permet en substance de ne pas tenir compte du JOIN lors du Delete, mais impossible de m'en souvenir ni de la retrouver.

Alors si quelqu'un pouvait me dépanner, merci d'avance.

PS: Je précise que je travaille avec SQL Server 2000


Calade

6 réponses

Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
Salut,

après une petite recherche sur mon site favori (MSDN) il semble que ce que tu recherches soit la propriété dynamique Unique Table, nop ? Avec un truc du genre :
myRecordset.Properties("Unique Table") = "T_Video_Related"
myRecordset.Delete()


Si c'est pas ça, pour ma décharge, je code pas VB, je n'utilise plus les RecordSet depuis ma scolarité et j'ai jamais touché à SQL Server
Messages postés
268
Date d'inscription
samedi 22 février 2003
Statut
Membre
Dernière intervention
24 avril 2013
3
Je te conseillerais soit une procédure stocké spécifique soit une requette paramettré, voit du coté des Table Adaptater sinon.
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
24
Salut,

ALTER PROCEDURE [BH_SP_SEL_KEYWORDS] 
    @VIDEO_ID AS INTEGER 
   
AS 
BEGIN 

DECLARE @tmp table
(
    // les champs de T_Keywords
);
INSERT INTO @tmp
    SELECT K.* 
    FROM T_Keywords AS K 
    inner join T_Keywords_Related AS KR ON KR.KWR_KW_ID = K.KW_ID  
         and KR.KWR_REC_ID = @VIDEO_ID 

SELECT KR.*, K.KW_WORD 
FROM T_Keywords_Related AS KR 
LEFT JOIN @tmp AS K ON KR.KWR_KW_ID = K.KW_ID 
WHERE KR.KWR_REC_ID = @VIDEO_ID 
ORDER BY K.KW_WORD 

END
GO


bye...
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Bonjour à tous et désolé pour le retard,

@jopop, c'était exactement ça et ça marche nickel, je devrais ajouter des barrettes mémoires dans mon propre serveau pour éviter la pagination.

@Malkuth, c'était déjà une procdure stockée et les Table Adapter n'existe pas à ma connaissane en VB6 (mais tu ne pouvais pas deviner que j'étais sous cet ODE).

@yann_lo_san, faire un ALTER TABLE me parait quand même un peu compliqué pour faire un simple DELETE sur un Recordset. Mais il est vrai que je n'ai pas testé.

En tout cas merci de votre réponse à tous les 3.

Calade
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
24
salut,

heuuu, ou as tu vu un ALTER TABLE ?

c'est juste que la table à ne pas deleter est mise dans une table temporaire, puis jointure.

bye...
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Bonjour,

@yann_lo_san, toutes mes excuses j'ai lu un peu trop vite ta suggestion.


Calade