2016-08-17 2 views
0

Я работаю с SQL Server 2008. У меня есть 2 таблицы.Сохраненная процедура сопоставления данных справочной таблицы и вставки

shades_table 
color_name category location 
Aqua  Blue  House A 
Denim  Blue  House B 
Azure  Blue  House B 
Zaffre  Blue  House A 
Scarlet Red  House C 
Ruby  Red  House D 
Chili  Red  House D 
Crimson Red  House A 

objects_table 
object_name  color_cat location2 
Super Aqua shoes  Null  Null 
Azure wallet   Null  Null 
Awesome Scarlet chair Null  Null 
Ruby socks   Null  Null 
Sparkly Denim chalk Null  Null 
Chili paper   Null  Null 
Zaffre vase   Null  Null 
Sharp Crimson eraser Null  Null 
Crimson watch   Null  Null 
Excellent Scarlet bucket Null

У меня есть справочная таблица, называемая shades_table. Столбец содержит имя цвета, а другой столбец содержит категорию цвета.

Я работаю над object_table. Столбец object_name содержит имя цвета. Я хотел бы, чтобы процедура/программа автоматически соответствовала именам color_names Object_name, а затем обновляла значения Null в столбце color_cat.

Мой текущий метод заключается в том, чтобы экспортировать shades_table в файл csv. Затем я написал программу Java, которая считывает файл CSV, и вывод в SQL файл, который будет работать на сервере:

UPDATE objects_table SET color_cat='Blue', location2 = 'House A' WHERE object_name LIKE '%Aqua%' AND color_cat IS NULL 
UPDATE objects_table SET color_cat='Blue', location2 = 'House B' WHERE object_name LIKE '%Denim%' AND color_cat IS NULL 
UPDATE objects_table SET color_cat='Blue', location2 = 'House B' WHERE object_name LIKE '%Azure%' AND color_cat IS NULL 
etc...

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

Обновление: Я добавил дополнительный столбец, который я также хочу сопоставить. (Обратитесь к моему выходу программы Java). Операция UPDATE с 2 SET не работает. пример

 
update o 
set o.color_cat = s.category, 
set o.location2 = s.location 
... 

не работает, дает «Неправильный синтаксис около ключевого слова„установить“.

+0

нормально, я не знаю, правильный синтаксис должен обновить набор a.color_cat = b.category, a.location2 = b.location .... Я не должен набирать SET второй раз. Спасибо, Unnikrishnan R, ты первым ответил. –

ответ

0

Вот запрос на обновление.

UPDATE a 
SET a.color_cat=b.category 
FROM objects_table a 
JOIN shades_table b ON a.[object_name] LIKE '%'+b.[color_name]+'%' 
WHERE a.color_cat IS null 

Если вы хотите в качестве процедуры

CREATE PROCEDURE Updateobjectstable 
AS 
BEGIN 
    UPDATE a 
    SET a.color_cat=b.category 
    FROM objects_table a 
     JOIN shades_table b ON a.[object_name] LIKE '%'+b.[color_name]+'%' 
    WHERE a.color_cat IS null 
END 
0

Я не вижу причины использовать процедуру для это задача. Обычный SQL должен работать.

UPDATE objects_table ot 
SET color_cat = st.category 
FROM shades_table st 
WHERE ot.object_name ILIKE concat('%', st.color_name, '%') 
    AND ot.color_cat IS NULL 
0

Простой update заявление будет делать это для вас:

update o 
set o.color_cat = s.category 
from objects_table o 
    left join shades_table s 
     on(o.[object_name] like '%' + s.color_name + '%') 
Смежные вопросы