根据选择的另一行而不使用DECLARing变量更新行

时间:2010-11-17 22:49:38

标签: sql sql-server sql-server-2005 tsql

如何根据另一行更新行。

我想更新这些:

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

使用此SELECT中的值:

  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

有没有办法在每个字段中执行此操作而无需DECLARE所有变量?

1 个答案:

答案 0 :(得分:5)

让我们看看,在FoxPro中你可以使用SCATTER和GATHER: - )

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

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

额外提示。您可以通过打开显示表格的对象资源管理器窗格,在SSMS中获取表格的所有字段列表,逗号分隔,然后单击加号(+)以显示表格下的文件夹。然后只需单击Columns文件夹并将其拖到查询窗格中。