簡體   English   中英

TSQL:通過使用With語句更新值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM