2015-07-07 4 views
2

Я не могу заставить мое обновление из метода внутреннего соединения работать. Я попытался написать несколько разных способов. Строки влияют, но значения таблицы продуктов никогда не обновляются.Обновление от внутреннего соединения

Выберите код для проверки (не должен возвращать никаких результатов после того, как запрос на обновление выполняется):

SELECT 
    [P].[ProductCode], 
    [P].[PriceSelling], 
    [ID].[InclPrice], 
    [P].[StockQty], 
    [ID].[Qty] 
FROM 
    dbo.Sync_ImportData AS [ID] 
INNER JOIN 
    dbo.Sync_Product AS [P] 
ON 
    [P].[ProductCode] = [ID].[ISBN] 
WHERE 
    ([P].[StockQty] <> [ID].[Qty] OR [P].[PriceSelling] <> [ID].[InclPrice]) 

Update Код:

UPDATE [P] 
SET 
    [P].[StockQty] = [ID].[Qty], 
    [P].[PriceSelling] = [ID].[InclPrice] 
FROM 
    dbo.Sync_Product AS [P] 
INNER JOIN 
    dbo.Sync_ImportData AS [ID] 
ON 
    [P].[ProductCode] = [ID].[ISBN] 
WHERE 
    ([P].[StockQty] <> [ID].[Qty] OR [P].[PriceSelling] <> [ID].[InclPrice]) 

В принципе мне нужно обновить фондовый Количество и цена, если импортированные данные a) имеет запись для продукта (ISBN соответствует ProductCode) и b) либо значение необходимо обновить (количество или цена отличается от ImportData)

+0

Вы считаете нулевые значения? –

+0

Я не вижу никаких очевидных причин, которые бы не работали так, как ожидалось. Вы можете использовать предложение 'OUTPUT', как описано здесь: http://www.tech-recipes.com/rx/47032/a-beginners-guide-to-the-output-clause-in-sql-server/, чтобы подтвердить, какие строки были обновлены. Неужели столбцы обновлены 'float'? –

+0

Вы уверены, что ProductCode соответствует ISBN? – Donal

ответ

1

Это поведение можно увидеть, если между таблицами было несколько совпадений. В частности, если ISBN не является уникальным в Sync_ImportData:

SELECT id.ISBN, COUNT(*) 
FROM dbo.Sync_ImportData id 
GROUP BY id.ProductCode 
HAVING COUNT(*) > 1 

Если есть дубликаты, то одна из строк будет использоваться для обновления - произвольно. Изменения не будут соответствовать второй строке.

+0

Гордон, ты совершенно прав. Я только что установил эту огромную проблему с тем, что должно было стать надежным источником данных. Спасибо за ваш ответ. Теперь настало время для разоблачения электронной почты :) – lukejkw

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