2016-08-17 5 views
0

Ich arbeite mit SQL Server 2008. Ich habe 2 Tabellen hier.Stored Procedure für Referenztabelle Daten übereinstimmen und einfügen

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

Ich habe eine Referenztabelle namens shades_table. Eine Spalte enthält Farbname und die andere Spalte enthält die Kategorie der Farbe.

Ich arbeite an der objects_table. Die Spalte object_name enthält den Farbnamen. Ich möchte, dass eine Prozedur/ein Programm die Farbnamen automatisch mit dem Objektnamen abgleicht und anschließend die Nullwerte in der Spalte color_cat aktualisiert.

Meine aktuelle Methode besteht darin, die shades_table in eine CSV-Datei zu exportieren. Dann habe ich ein Java-Programm, das die CSV-Datei liest und Ausgabe in eine SQL-Datei vom Server ausgeführt werden:

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...

Diese Methode funktioniert, aber es ist dumm, umständlich. Ich weiß einfach nicht, wie man die SQL-Anweisungen schreibt, die tun können, was ich will.

Update: Ich habe eine zusätzliche Spalte hinzugefügt, die ich auch anpassen möchte (siehe meine Java-Programmausgabe). UPDATE-Anweisung mit 2 SET funktioniert nicht. Beispiel

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

nicht funktioniert, gibt „Falsche Syntax nahe dem Schlüsselwort 'gesetzt'.

+0

ok, ich wusste nicht, die korrekte Syntax ein Satz a.color_cat = b.category aktualisiert werden sollte, a.location2 = b.location .... Ich sollte SET das 2. Mal nicht eingeben. Danke, Unnikrishnan R, du warst der Erste, der antwortete. –

Antwort

0

Hier ist die Abfrage-Update.

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 

Wenn Sie es als ein Verfahren wollen

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

Ich sehe keinen Grund, Verfahren für th zu verwenden ist Aufgabe. Plain SQL sollte funktionieren.

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

Einfache update Erklärung wird das für Sie tun:

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 + '%')