更新表并返回旧值和新值

Der*_*yer 2 sql db2

我正在编写一个 VB 应用程序,用于清理 DB2 数据库中的一些数据。在一些表中我想更新整个列。例如帐号列。我正在将所有帐号更改为从 1 开始,并在列表中向下递增。我希望能够返回旧帐号和新帐号,这样我就可以生成某种可以引用的报告,这样我就不会丢失原始值。我正在更新列:

DECLARE @accntnum INT 
SET @accntnum = 0 
UPDATE accounts
SET @accntnum = accntnum = @accntnum + 1
GO 
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以让我在一个表中同时返回原始的 accntnum 和新的 accntnum ?

bha*_*mby 5

DB2 有一个非常漂亮的功能,您可以从“数据更改语句”中选择数据。这是在 DB2 for Linux/Unix/Windows 上进行测试的,但我认为它至少也应该适用于DB2 for z/OS

对于编号,您也可以考虑创建一个序列。那么你的更新将是这样的:

 CREATE SEQUENCE acct_seq
     START WITH 1
     INCREMENT BY 1
     NO MAXVALUE
     NO CYCLE
     CACHE 24
;

SELECT accntnum  AS new_acct, old_acct
FROM FINAL TABLE (
    UPDATE accounts INCLUDE(old_acct INT)
    SET accntnum = NEXT VALUE FOR acct_seq, old_acct = accntnum
)
ORDER BY old_acct;
Run Code Online (Sandbox Code Playgroud)

INCLUDE部分在结果表中创建一个具有指定名称和数据类型的新列,然后您可以像设置任何其他字段一样在更新语句中设置值。