我正在使用SQL Server 2012 / T-SQL,特别是Management Studio。
我提供了一个表格(我们称之为 trackingInfo ),如下所示:
po_no tracking_no
1 ABC
2 DEF
2 GHI
我试图通过以下方式将tracking_no数据插入表格(我们称之为 purchaseOrders ):
po_no notes
1 #ABC
2 #DEF, #GHI
(请注意,我无法更改我提供的 trackingInfo 数据或 purchaseOrders 表格中我尝试插入信息的结构。我是仅限于上述结构。)
我有一个更新查询,适用于数据集 trackingInfo 每个po_no只包含一个tracking_no的实例(例如po_no 1)。但是,如果每个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
;
答案 0 :(得分:1)
您不需要在UPDATE
查询中多次更新同一条记录。这可以作为基于集合的操作使用XML来完成,以便于连接:
CREATE TABLE dbo.trackingInfo(
po_no int NOT NULL
, tracking_no varchar(10) NOT NULL
);
CREATE TABLE dbo.purchaseOrders(
po_no int NOT NULL
, notes varchar(MAX) NULL
);
INSERT INTO dbo.trackingInfo VALUES
(1, 'ABC')
, (2, 'DEF')
, (2, 'GHI');
INSERT INTO dbo.purchaseOrders (po_no) VALUES
(1)
, (2);
UPDATE dbo.purchaseOrders
SET notes = STUFF(( SELECT ', #' + tracking_no
FROM dbo.trackingInfo AS ti
WHERE ti.po_no = purchaseOrders.po_no
FOR
XML PATH('')
), 1, 2, '');