TSQL: обновить значения с помощью оператора With? - PullRequest
3 голосов
/ 04 апреля 2009

У меня есть таблица со столбцом, я хотел бы обновить его значения. Вот пример кодов TSQL:

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?

Это обновление не работает. Комментируя SELECT, я вижу результат, который мне нужен. Как я могу сделать это изменение в пакетном режиме для группы строк? Не уверен, что это возможно с помощью оператора WITH?

Вот некоторые примеры данных:

....
xxxDESC_AyyyDESC_Bwwww
aaaDESC_AxxDESC_Beee
....

обновленные будут:

....
xxxNEW_1yyyNEW_2wwww
aaaNEW_1xxNEW_2eee
....

Ответы [ 3 ]

4 голосов
/ 04 апреля 2009

возможно

UPDATE myTable 
SET description = newdesc
FROM Pieces
WHERE Pieces.id = myTable.itemid
2 голосов
/ 04 апреля 2009

Это должно делать то, что вы хотите. Вам здесь не нужно.

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

Если оба они никогда не находятся в одних и тех же полях, вы можете использовать два отдельных оператора для лучшего управления ресурсами в случае большой таблицы.

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

НТН

1 голос
/ 04 апреля 2009

Кстати, если вы действительно хотите использовать CTE для обновления (хотя я предпочитаю более простые обновления), вы можете. Но вы должны включить обновленный столбец в CTE, и обновляемая таблица - это имя CTE, а не исходное имя таблицы. Как это:

;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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...