2010-11-17 59 views
4

如何基于另一行更新行。基于另一个未选择DECLARE变量的单行更新行

我想更新这些:在这个SELECT

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

的价值观:

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

目前我只使用更新field_one:

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 

是否有办法在每个领域做到这一点,而不必声明所有的变量?

+0

对于哪个版本的SQL Server? – 2010-11-17 22:54:05

回答

5

让我们来看看,在FoxPro中您可以使用分散和收集:-)

但在这里,你可以这样做:

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 

对于一个额外的小费。您可以通过打开显示表格的对象资源管理器窗格,然后单击加号(+)来显示表格下的文件夹,从而获得表格中所有字段的列表(逗号分隔)。然后只需点击列文件夹并将其拖到您的查询窗格。

+0

非常好,除非你在派生表中不应该有*。 – 2010-11-17 23:02:15

+0

感谢G马斯特罗斯,没有接受。 – 2010-11-17 23:02:49