2010-08-19 5 views
0

Je publie une déclaration UPDATE sur une table Sybase mais je reçois l'erreur suivante:Erreur lors de la mise à jour dans la table Sybase

Msg 325, Level 18, State 4: Server 'dev', Line 1: Adaptive Server finds no legal query plan for this statement. If an Abstract Plan is forcing the query plan, check its correspondence to the query. If not, please contact Sybase Technical Support.

Voici mon instruction UPDATE.

Update TABLE1 SET SAMPLECOL = (
    Select 
    TABLE2.SAMPLECOL 
    from TABLE2 
    where 
    TABLE2.COMMON_ID = TABLE1.COMMON_ID 
) 
where 
TABLE1.TABLE1_ID in (
    Select 
    TABLE1.TABLE1_ID 
    from TABLE1 
    inner join TABLE2 
    on TABLE1.COMMON_ID = TABLE2.COMMON_ID 
    where TABLE1.SAMPLECOL = '' 
) 

Toute idée sera grandement appréciée.

Répondre

1

JE PENSE le problème est que vous définissez la colonne SAMPLECOL avec quelque chose qui pourrait renvoyer plusieurs valeurs. Essayez de faire cela et après le résultat de retour ici:

Update TABLE1 SET SAMPLECOL = (
    set rowcount 1 
    Select 
    TABLE2.SAMPLECOL 
    from TABLE2 
    where 
    TABLE2.COMMON_ID = TABLE1.COMMON_ID 
    set rowcount 0 
) 

(ce qui sélectionnera un seul enregistrement de ligne et votre logique pourrait ne pas fonctionner sur cette base, mais aussi loin que l'erreur que vous obtenez je suis sûr est lié à ce). Encore une fois, essayez-le et laissez-nous savoir le résultat.

+1

Ce serait ma conjecture aussi. (Sauf que je pense que vous voulez dire des valeurs multiples, pas des colonnes?) Je suggère également d'exécuter la requête modifiée en tant que SELECT plutôt qu'en tant que UPDATE pour voir quelles données reviennent. Cela indiquerait si la sous-requête renvoyait ou non un scalaire. –

+0

Vous avez raison "valeurs multiples", est corrigé - Merci! – VoodooChild

+0

Salut, Lorsque j'ai utilisé l'instruction ci-dessus, j'ai une erreur Msg 156, Niveau 15, État 2: Serveur 'dev', Ligne 1: Syntaxe incorrecte près du mot clé 'top'. –

0

essayez à la place;

update TABLE1 
    set SAMPLECOL = T2.SAMPLECOL 
    from TABLE1 T1, TABLE2 T2 
where T1.COMMON = T2.COMMON 
    and isnull(T1.SAMPLECOL, '') = '' 
Questions connexes