2010-11-17 7 views
4

Comment mettre à jour des lignes en fonction d'une autre ligne.Mise à jour des lignes en fonction d'une autre ligne sélectionnée sans les variables DECLAREing

Je veux mettre à jour ces:

SELECT field_one, field_two, field_three 
    FROM some_table WHERE user_ID = 296 

Avec les valeurs dans ce SELECT:

SELECT TOP 1 * field_one, field_two, field_three 
    FROM some_table 
    WHERE user_ID = 500 
ORDER BY ID 

Actuellement, je suis mise à jour seulement field_one en utilisant:

DECLARE @field_one nvarchar(1000) 

SELECT @field_one = field_one 
    FROM some_table WHERE user_ID = @copy_user_ID 

UPDATE some_table 
    set field_one = @field_one 
where user_ID = @user_ID 

est-il un moyen faire cela avec tous les champs sans avoir à DÉCLARER toutes les variables?

+0

Pour quelle version de SQL Server? –

Répondre

5

Voyons voir, dans FoxPro vous pouvez utiliser Scatter et RASSEMBLER :-)

Mais ici, vous pouvez le faire:

UPDATE Table1 
SET Field_one = a.Field_one, 
    Field_two = a.Field_two, 
    Field_three = a.Field_three 
FROM 
    (SELECT TOP 1 field_one, field_two, field_three 
     FROM some_table WHERE user_ID = 500 
     ORDER BY ID) a 
WHERE user_ID = 296 

Pour un pourboire supplémentaire. Vous pouvez obtenir une liste de tous les champs d'une table, séparés par des virgules, dans SSMS en ouvrant le volet Explorateur d'objets affichant la table, puis cliquez sur le signe plus (+) pour afficher les dossiers sous la table. Puis cliquez simplement sur le dossier Columns et faites-le glisser dans votre volet de requête.

+0

Très bien, sauf que vous ne devriez pas avoir le * dans la table dérivée. –

+0

Merci G Mastros, n'a pas compris cela. –