2011-05-11 2 views
2

ma programmation SQL est limitée, c'est pourquoi j'ai un problème avec ce code probablement basique. J'essaie de mettre à jour un enregistrement comme im le récupérer, je sais que je peux le mettre à jour si je le divise en deux procédures mais je voudrais mettre à jour les dossiers qu'il récupère pour l'amour de consistance. Quoi qu'il en soit ci-dessous est le code et nous espérons qu'il montrera ce que je suis en train d'accomplir:Utiliser la mise à jour en utilisant Select dans SQL

Update dbo.ASNs 
    Set Sent = 'Yes' 
    Where ASNNumber In 
(
    Select * From dbo.ASNs 
    Where Sent = 'No' 
    for xml auto, ELEMENTS, ROOT('ASNs') 
) 
+1

+1 pour l'utilisation de "tout" dans une question. – pixelbobby

Répondre

0

Essayez de regarder à l'aide UPDATE avec un OUTPUT INTO.

2

Je pense que vous dire ceci:

UPDATE dbo.ASNs 
SET Sent = 'Yes' 
OUTPUT inserted.* 
WHERE Sent = 'No' 
FOR XML auto, ELEMENTS, ROOT('ASNs') 

Voir here

1

la clause IN est fausse, vous ne pouvez pas comparer une colonne *.

...Where ASNNumber In (Select * From dbo.ASNs... 

cela devrait être quelque chose comme:

...Where ASNNumber In (Select ASNNumber From dbo.ASNs ... 
0

Sans autres optimisations:

UPDATE dbo.ASNs 
SET  Sent = 'Yes' 
FROM dbo.ASNs 
WHERE ASNNumber IN (SELECT ASNNumber 
         FROM  dbo.ASNs 
         WHERE Sent = 'No' 
     FOR  XML AUTO , 
        ELEMENTS , 
        ROOT('ASNs')) 
Questions connexes