Pb de Delete en SQL avec Jointure

Résolu
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 16 janv. 2013 à 14:34
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 18 janv. 2013 à 14:32
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

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
16 janv. 2013 à 15:59
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
3
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
16 janv. 2013 à 23:41
Je te conseillerais soit une procédure stocké spécifique soit une requette paramettré, voit du coté des Table Adaptater sinon.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
17 janv. 2013 à 22:32
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...
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
18 janv. 2013 à 09:25
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
18 janv. 2013 à 13:37
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...
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
18 janv. 2013 à 14:32
Bonjour,

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


Calade
0
Rejoignez-nous