参考表数据匹配和插入的存储过程

时间:2016-08-17 15:37:36

标签: sql sql-server tsql stored-procedures

我正在使用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的引用表。列包含color_name,另一列包含颜色类别。

我正在研究objects_table。 object_name列包含颜色名称。我希望一个过程/程序自动将color_names与Object_name匹配,然后更新color_cat列中的Null值。

我目前的方法是将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程序输出)。使用2 SET的UPDATE语句不起作用。 例子

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

不起作用, 在关键字'set'附近给出“语法错误。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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 + '%')