2014-09-23 5 views
0

У меня есть таблица BaseProducts. Я хочу обновить строку из другой строки той же таблицы. Это то, что я пытался, но не работают средства не Updation,Обновить строку из другой строки той же таблицы?

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; 

У меня есть SourceBaseProductId и DestinationBaseProductId.

+1

«но не работает», - а это значит? –

+0

0 строк. – user960567

+1

И запрос возвращает строки без 'update', а просто' select'? –

ответ

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; 

В этом случае вы можете иметь различный исходный и конечный идентификатор, вы предоставляете их в ИНЕКЕ ,

+0

Приятно это работает – user960567

1

Не нужно внутреннее соединение. Это сработает.

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

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

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

кажется все, что вы на самом деле хотите сделать это:

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

Простое обновление, где вы извлекаете значение, которое будет установлен. Не нужно вообще присоединяться.

+0

Что делать, если у вас несколько полей? Кажется, что запрос из ОП указывает. –

+0

@Patrick Hofman: Ах, возможно, вы правы. AFAIK, SQL Server не может обрабатывать кортежи, такие как 'SET (Описание, цена) = (SELECT Description, Price FROM ...)' - это стандартный SQL IIRC. Так что да, для SQL Server вам понадобится соединение. –

+0

Просто посмотрел. UPDATE с кортежами (множественное назначение столбцов) является стандартным, как и SQL 2003. И SQL Server пока не предоставляет эту функциональность. –

Смежные вопросы