我正在使用SQL Server 2012/T-SQL,特別是Management Studio。如何在同一更新查詢中多次更新同一記錄?
我提供了一個表(我們稱之爲trackingInfo),它看起來是這樣的:
po_no tracking_no
1 ABC
2 DEF
2 GHI
我試圖給tracking_no數據插入表(我們稱之爲
po_no notes
1 #ABC
2 #DEF, #GHI
(請注意,我不能改變的結構要麼trackingInfo:以下列方式purchaseOrders中)我給出的數據或purchaseOrders表中我試圖插入信息。我僅限於上述結構。)
我有一個更新查詢,適用於數據集trackingInfo僅包含每個po_no(例如po_no 1)的單個tracking_no的實例。但是,如果每個po_no有多個tracking_no(比如上面的po_no 2),則我正在使用的更新查詢無法附加第二個tracking_no值。此更新查詢位於底部。
我對解決方案的搜索表明,我在同一更新查詢中多次更新相同記錄的純限制運行。但是,我找不到比以下更不明顯的替代方案或解決方案。是否有一種相對簡單的方法在同一更新中多次更新相同的記錄/字段?
UPDATE purchaseOrders
SET purchaseOrders.notes =
CASE
WHEN CHARINDEX(trackingInfo.tracking_no,purchaseOrders.notes) > 0
THEN purchaseOrders.notes -- If tracking_no is already in notes, don't insert it.
WHEN len(purchaseOrders.notes) = 0 OR purchaseOrders.notes IS NULL
THEN '#' + trackingInfo.tracking_no -- If notes is empty, insert the tracking_no.
ELSE purchaseOrders.notes + ', #' + trackingInfo.tracking_no -- If something is in notes, but it's not the tracking_no, then append the tracking_no.
END
FROM purchaseOrders
INNER JOIN trackingInfo ON purchaseOrders.po_no = trackingInfo.po_no
;
但是,您正在傳遞硬編碼的1,2值嗎?如何避免它? – DevelopmentIsMyPassion
@DevelopmentIsMyPassion,數據值不是硬編碼的。查詢中的文字「1和2」是「STUFF」函數的起始位置和長度參數。此函數從連接字符串的開始處刪除前導逗號和空格。 –
真的很棒。我不知道 – DevelopmentIsMyPassion