从同一个表的另一行更新一行?

时间:2014-09-23 07:23:20

标签: sql sql-server

我有一张BaseProducts表。我想从同一个表的另一行更新一行。这是我尝试但不工作意味着没有更新,

UPDATE DP
SET 
   DP.[Description] = SP.[Description]
   ................................
   ................................
   ................................
    ,[LastModificationDateUtc] = GETUTCDATE()
FROM    
    [dbo].[BaseProducts] DP
INNER JOIN 
    [dbo].[BaseProducts] SP ON DP.Id = SP.Id
WHERE   
    SP.Id = @SourceBaseProductId
    AND DP.Id = @DestinationBaseProductId;

我有SourceBaseProductIdDestinationBaseProductId

3 个答案:

答案 0 :(得分:2)

不需要内连接。这将有效。

            UPDATE   DP
                   SET  DP.[Description] = SP.[Description]

            FROM    [dbo].[BaseProducts] DP
                    ,[dbo].[BaseProducts] SP

            WHERE   
                 SP.Id = @SourceBaseProductId
                 AND DP.Id = @DestinationBaseProductId;

答案 1 :(得分:1)

根据我的理解,您并不意味着使用inner join,而是cross join

UPDATE DP
SET 
   DP.[Description] = SP.[Description]
   ................................
   ................................
   ................................
    ,[LastModificationDateUtc] = GETUTCDATE()
FROM    
    [dbo].[BaseProducts] DP
CROSS JOIN 
    [dbo].[BaseProducts] SP
WHERE   
    SP.Id = @SourceBaseProductId
    AND DP.Id = @DestinationBaseProductId;

在这种情况下,您可以在where子句中提供不同的源和目标ID。

答案 2 :(得分:0)

看来你真正想做的就是:

UPDATE BaseProducts
SET Description =
(
  SELECT Description 
  FROM BaseProducts
  WHERE ID = @SourceBaseProductId
)
WHERE ID = @DestinationBaseProductId;

只是一个简单的更新,您可以在其中检索要设置的值。根本不需要加入。