2009-04-03 8 views
2

Ich habe eine Tabelle mit einer Spalte Ich möchte seine Werte aktualisieren. Hier ist ein Beispiel für TSQL-Codes:TSQL: Aktualisieren Sie Werte mit With-Anweisung?

WITH Pieces(id, newdesc) AS 
(
SELECT itemid, REPLACE(REPLACE(description, 'DESC_A', 'DESC_B'), 'NEW_1', 'NEW_2') 
    FROM myTable 
    WHERE description like '%DESC_A%DESC_B%' 
) 
-- SELECT * FROM Pieces 
UPDATE myTable SET description = newdesc // not working, how? 

Dieses Update funktioniert nicht. Durch das Auskommentieren von SELECT kann ich sehen, dass das Ergebnis das ist, was ich brauche. Wie kann ich diese Änderung für eine Gruppe von Zeilen in einer Stapelweise vornehmen? Nicht sicher ist es mit WITH Aussage möglich?

Hier sind einige Beispieldaten:

.... 
xxxDESC_AyyyDESC_Bwwww 
aaaDESC_AxxDESC_Beee 
.... 

die udpated diejenigen sein wird:

.... 
xxxNEW_1yyyNEW_2wwww 
aaaNEW_1xxNEW_2eee 
.... 
+0

Welchen Fehler bekommen Sie? –

+0

Ich könnte eine Tabellenvariable definieren und den Wert in die WITH-Anweisung einfügen und dann myTable durchlaufen, um die Aktualisierung durchzuführen. Ist es möglich, nur mit WITH-Anweisung? –

+0

Ungültiger Spaltenname 'newdesc'. –

Antwort

4

vielleicht

UPDATE myTable 
SET description = newdesc 
FROM Pieces 
WHERE Pieces.id = myTable.itemid 
+0

wie man es annimmt? Ich kann es nicht herausfinden (nicht akzeptieren, ui). –

+0

Klicken Sie auf den Check unter dem Upvote downvote Pfeile –

+0

Danke Jhonny, ein schönes Wochenende! –

2

Dies sollte Sie wollen das tun, was. Du brauchst kein mit hier.

UPDATE myTable SET description=REPLACE(REPLACE(description, 'DESC_A', 'NEW_1'), 'DESC_B', 'NEW_2') 
WHERE description like '%DESC_A%' OR description like '%DESC_B%' 

Wenn diese beide sind nie in den gleichen Bereichen könnten Sie zwei separate Anweisungen für eine bessere Ressourcenmangement bei einem großen Tisch verwenden.

UPDATE myTable SET description=REPLACE(description, 'DESC_A', 'NEW_1') 
WHERE description like '%DESC_A%' 
go  
UPDATE myTable SET description=REPLACE(description, 'DESC_B', 'NEW_2') 
WHERE description like '%DESC_B%' 

HTH

+0

ja. Es sollte auch funktionieren. Mit ist auch cool. –

1

By the way, wenn Sie wirklich einen CTE für die Aktualisierung verwendet werden soll (obwohl ich einfacher Updates bevorzugen), können Sie. Sie müssen jedoch die aktualisierte Spalte in das CTE einfügen und die Tabelle, die Sie aktualisieren, ist der CTE-Name, nicht der ursprüngliche Tabellenname. Wie folgt:

;WITH Pieces(id, description, newdesc) 
AS(
SELECT itemid, description, REPLACE(REPLACE(description, 'DESC_A', 'DESC_B'), 'NEW_1', 'NEW_2') 
FROM myTable WHERE description like '%DESC_A%DESC_B%' 
) 
UPDATE Pieces SET description = newdesc 
Verwandte Themen