我必须批量更新表格。我首先在数据集中选择记录,处理它们并将从数据集构造的xml发送到存储过程。 我有一个存储过程,其中xml作为输入参数。它使用合并查询更新表,如下所示
CREATE PROCEDURE SP_UPDATE(IN RECORDS XML, OUT ROWSUPDATED INTEGER)
BEGIN
DECLARE RCOUNT INTEGER;
MERGE INTO TARGET_TABLE AS T
USING (SELECT X.* FROM
XMLTABLE('$d/Root/Record' passing RECORDS as "d"
COLUMNS
"A" VARCHAR(10) PATH 'a',
"B" VARCHAR(10) PATH 'b',
"C" VARCHAR(10) PATH 'c',
"D" VARCHAR(10) PATH 'd',
"E" VARCHAR(10) PATH 'e',
"F" VARCHAR(10) PATH 'f'
) AS X) AS S
ON T.FCOL=S."F"
WHEN MATCHED AND T.ACOL=0 THEN
UPDATE
SET
T.ACOL=1,
T.BCOL=XT."B",
T.COL=XT."C"
GET DIAGNOSTICS RCOUNT=ROWCOUNT;
SET ROWSUPDATED=RCOUNT;
END
在所有记录更新之前,将调用此过程。新记录由其他应用程序同时插入目标表。我必须通过将一些列值设置为1来更新旧的和新插入的记录。 问题是ROWSUPDATED值不正确。假设我已发送10 xml记录进行更新,ROWSUPDATED值将小于10.为什么ROWCOUNT变量没有给我正确的计数?我的存储过程是否在连续插入时无法更新记录,或者只是ROWCOUNT的错误值?在同一个表中是否存在插入时,ROWCOUNT最安全的方法是获取合并查询更新的行数?