2010-03-04 4 views
2

У меня есть таблица продуктов, в которой есть идентификатор производителя, который в настоящий момент является -1 для всех продуктов.Обновить таблицу продуктов на основе префикса sku

У меня есть таблица производителей, имеющая префикс SKU.

Так что, если префикс MFG артикулов товаров: ABC

Затем стол продукты будут иметь продукты, такие как ABC123, ABC3434.

Так что мне нужен запрос для обновления таблицы продуктов, чтобы установить идентификатор производителя на основе skuPrefix в таблице «Производитель».

это возможно?

ответ

2
UPDATE tblProducts 
SET P.manufacturerId = M.manufacturerId 
FROM tblProducts P 
JOIN tblManufacturers M ON LEFT(P.Sku, 3) = M.SkuPrefix 
-- above, replace 3 with whatever the prefix length is 
--WHERE possibly some where condition 

Вышеупомянутый должен сделать трюк. Несколько соображений однако:

  • в случае очень большой стол продукта, может быть предпочтительным, чтобы выполнить эти обновления в небольших [эр] партий, то есть путем введения некоторых, когда условие (в зависимости от модели восстановления, это может избежать чрезмерного слияния SQL-журнала)
  • Длина префикса должна быть определена, конечно, я использовал 3 для иллюстрации, вам может понадобиться 5 или 8?
  • , если каким-то образом длина префикса является переменной, один может быть в состоянии использовать
    ... (ON CHARINDEX(P.Sku, M.SkuPrefix) = 1)
    как условие соединения.
+0

вы, вероятно, хотите Установить P.manufacturerId = M.manufacturerID –

+0

@Russel. Спасибо за указание на это. Я не думаю, что здесь необходим спецификатор таблицы (поскольку он неявчен синтаксису 'UPDATE tableName'), но, вероятно, это не повредит. – mjv

0
UPDATE tblProducts 
SET manufacturerId = M.manufacturerId 
FROM tblProducts P 
JOIN tblManufacturers M ON M.Sku + '%' LIKE P.sku 

Если это сделать

+0

Вы, вероятно, имеете в виду 'P.sku LIKE M.sku + '%'', а не наоборот – mjv

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