我需要使用时间戳执行记录重新排序,但是当查询运行时没有匹配时,我得到一个NOT-NULL约束违规。
以下是查询 -
UPDATE ORDR
SET QUE_NUM = ORDR2.SORT_ORDER
FROM
(
SELECT ORDR_ID, ROW_NUMBER() OVER (ORDER BY CRTD_TS) AS SORT_ORDER
FROM ORDR
WHERE STUS_CD IN ('01','02','03','04','05','06')
) ORDR2
WHERE ORDR2.ORDR_ID = ORDR.ORDR_ID
我在下面得到例外 - 错误:“que_num”列中的空值违反非空约束
答案 0 :(得分:1)
查询按原样运行。我刚刚测试过。考虑一下这个演示:
CREATE TEMP TABLE ordr (
ordr_id int
,que_num int NOT NULL
,stus_cd text
,crtd_ts int
);
INSERT INTO ORDR VALUES
(1, 1, '01', 6)
,(2, 2, '02', 5)
,(3, 3, '03', 4)
,(4, 4, '04', 3)
,(5, 5, '05', 1)
,(6, 6, '06', 2);
UPDATE ordr
SET que_num = ordr2.sort_order
FROM (
SELECT ordr_id, row_number() OVER (ORDER BY crtd_ts) AS sort_order
FROM ordr
WHERE stus_cd IN ('07','08') -- no match
) ordr2
WHERE ordr2.ordr_id = ordr.ordr_id
返回:
查询成功返回:0行受影响,31毫秒执行时间。