我有一个用于存储数据的表。当用户单击我的客户端系统上的网格上的保存时,将填充该表。在这里我做了一个非常简单的例子。该表称为TableA。客户端屏幕显示五行,因此当用户单击保存时,它将转换为五个插入:
CREATE TABLE [dbo].[TableA]
(
[IdA] INT IDENTITY (1, 1) NOT NULL,
[valueA] CHAR(10) NOT NULL
)
INSERT INTO TableA VALUES (1, 'one')
INSERT INTO TableA VALUES (2, 'two')
INSERT INTO TableA VALUES (3, 'three')
INSERT INTO TableA VALUES (4, 'four')
INSERT INTO TableA VALUES (5, 'five')
GO
现在,客户端上的用户更改了网格中的数据,并将最新数据读入临时表。在这里,我用TableB模拟它
CREATE TABLE [dbo].[TableB]
(
[IdB] INT IDENTITY (1, 1) NOT NULL,
[valueB] CHAR(10) NOT NULL
)
INSERT INTO TableB VALUES (1, 'one')
INSERT INTO TableB VALUES (3, 'newThree')
INSERT INTO TableB VALUES (4, 'newFour')
INSERT INTO TableB VALUES (5, 'five')
GO
有人可以建议我如何使用TableB中的新数据来更新TableA中的行。在这种情况下我需要做的是删除ID为2的行,并更新ID为4和5的行。每次都可能不同。例如,用户可能会添加行,因此我需要向TableA添加一个新行。请注意,所有这些都发生在存储过程中。我真正需要的是一些关于我可以加入TableA和TableB以不同方式创建插入,删除和更新TableA以使其进入最新状态的方法的建议。
请注意,这个特定的例子我最终需要:
答案 0 :(得分:1)
带有JOIN的更新:
UPDATE TableA
SET TableA.ValueB = TableB.ValuA
FROM TableA
JOIN TableB
ON TableA.IdB = TableB.IdA
然后删除无关的行:
DELETE FROM TableA
WHERE NOT EXISTS (SELECT 1 FROM TableB WHERE TableB.IdA = TableA.IdB)