[英]TSQL: Update values by using With statement?
我有一個帶有列的表,我想更新其值。 這是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
....
也許
UPDATE myTable
SET description = newdesc
FROM Pieces
WHERE Pieces.id = myTable.itemid
這應該做您想要的。 您不需要在這里。
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%'
高溫超導
順便說一句,如果您確實想使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.