基于在没有DECLAREing变量的情况下选择的另一行更新行

goi*_*ing 4 sql t-sql sql-server sql-server-2005

如何基于另一行更新行.

我想更新这些:

SELECT field_one, field_two, field_three 
  FROM some_table WHERE user_ID = 296
Run Code Online (Sandbox Code Playgroud)

使用此SELECT中的值:

  SELECT TOP 1 * field_one, field_two, field_three 
    FROM some_table 
   WHERE user_ID = 500 
ORDER BY ID
Run Code Online (Sandbox Code Playgroud)

目前我只使用以下方式更新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
Run Code Online (Sandbox Code Playgroud)

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

小智 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
Run Code Online (Sandbox Code Playgroud)

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