2009-10-30 2 views
0

Good Afternoon All,Problème de jointure externe SQL Server 2005 dans la procédure stockée

J'ai deux tables dans ma base de données SQL Server 2005, Main et MSDRGWEIGHTS. Je veux créer une procédure stockée qui met à jour Main.RelWeight avec la valeur appropriée de MSDRGWEIGHTS. J'ai écrit le code suivant dans le cadre de la procédure stockée:

UPDATE MAIN 
left outer join MSDRGWEIGHTS AS W ON MAIN.MSDRG=W.MSDRG 
SET M.RELWEIGHT = 
CASE 
WHEN M.DISCHARGEDATE BETWEEN 20071001 AND 20080930 THEN W.WEIGHTSOCT07 
WHEN M.DISCHARGEDATE BETWEEN 20081001 AND 20090930 THEN W.WEIGHTSOCT08 
END 
END 
GO 

Lorsque j'exécute ce code, je reçois un message d'erreur indiquant une syntaxe incorrecte près de gauche de mot-clé. Quelqu'un peut-il suggérer la bonne façon de mettre à jour RELWEIGHT en utilisant une procédure stockée? Ou, est-ce en dehors de la portée d'un sproc?

Merci, Sid

+0

Que se passe lorsque vous exécutez la même SQL exacte (moins la fin dernière et le GO, bien sûr) dans SSMS? –

+0

Personnellement, je n'aime pas voir les requêtes avec le mot OUTER en eux. – JonH

+0

ack, healthcare .... –

Répondre

4
UPDATE 
      m 
    SET m.RELWEIGHT= CASE 
         WHEN M.DISCHARGEDATE BETWEEN 20071001 AND 20080930 THEN W.WEIGHTSOCT07WHEN 
         WHEN M.DISCHARGEDATE BETWEEN 20081001 AND 20090930 THEN W.WEIGHTSOCT08 
    END 
    FROM 
      MAIN m 
    INNER JOIN MSDRGWEIGHTS mw 
    ON 
    mw.MSDRG = m.MSDRG 
+0

Notez que la jointure interne ne mettra à jour que les lignes qui ont réellement une valeur dans la table mw. Vraiment cela est nécessaire allyou à moins que vous vouliez définir une valeur existante à null s'il n'y a pas de correspondance. – HLGEM

+0

Cela a fonctionné parfaitement! Merci beaucoup:) – SidC

Questions connexes