sql - 更新表并返回旧值和新值

标签 sql db2

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

DECLARE @accntnum INT 
SET @accntnum = 0 
UPDATE accounts
SET @accntnum = accntnum = @accntnum + 1
GO 

有没有办法让我在一个表中同时返回原始 accntnum 和新 accntnum?

最佳答案

DB2 有一个真正的 nifty feature您可以从“数据更改声明”中选择数据。这已经在 DB2 for Linux/Unix/Windows 上进行了测试,但我认为它至少也应该适用于 DB2 for z/OS。 .

对于您的编号,您可能会考虑创建一个 sequence ,还有。那么您的更新将类似于:

 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;

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

关于sql - 更新表并返回旧值和新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18259024/

相关文章:

sql - ORACLe PROCEDURE - AUTHID 仅在模式级别允许

mysql - 如何查询没有起始日期和结束日期的历史价格?

sql - OData 是否旨在用于政府和金融环境?我需要什么安全预防措施?

sql:如何从同一个表中获取相关数据

sql - 令人困惑的 SQL。简短但奇怪

php - 将随机字符附加到用户上传照片的末尾

db2 - 如何从 DB2 中的存储过程中获取变量值?

跨多行显示 "total column"的 SQL 查询

db2 - 有关DB2的良好IDE的建议

sql - 从同一个表中进行多项选择(带 Null)