我正在编写一个 VB 应用程序,用于清理 DB2 数据库中的一些数据。在一些表中我想更新整个列。例如帐号列。我正在将所有帐号更改为从 1 开始,并在列表中向下递增。我希望能够返回旧帐号和新帐号,这样我就可以生成某种可以引用的报告,这样我就不会丢失原始值。我正在更新列:
DECLARE @accntnum INT
SET @accntnum = 0
UPDATE accounts
SET @accntnum = accntnum = @accntnum + 1
GO
有没有一种方法可以让我在一个表中同时返回原始的 accntnum 和新的 accntnum ?
DB2 有一个真正的漂亮的功能 https://www.ibm.com/docs/en/db2/11.5?topic=statement-result-sets-from-sql-data-changes您可以在其中从“数据更改声明”中选择数据。这是在 DB2 for Linux/Unix/Windows 上测试的,但我认为它至少也应该工作在用于 z/OS 的 DB2 https://www.ibm.com/docs/en/db2-for-zos/12?topic=data-selecting-values-while-updating.
对于您的编号,您可能会考虑创建一个sequence https://www.ibm.com/docs/en/db2/11.5?topic=statements-create-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;
The INCLUDE
部分在结果表中创建一个具有指定名称和数据类型的新列,然后您可以像设置任何其他字段一样在更新语句中设置值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)