sql server—在sql中检索记录后立即更新表

laik7k3q  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(355)

我有一个sql查询,它检索所有具有[stat\u tg]=“inserted”的记录,并将输出转换为xml文件,最后将所有具有[stat\u tg]=“inserted”的记录更新为[stat\u tg]=“deleted”。我的要求是在将记录检索到xml之后立即更新[stat\u tg]字段。我的问题如下。

BEGIN

SELECT * FROM 
(
SELECT  
PXTXTP,
PXTXCD,
PXACCD

FROM [RecordDetails].[dbo].[Records]  
WHERE  [STAT_TG]   = 'INSERTED'
) AS "Transaction"

FOR XML AUTO, ELEMENTS, ROOT('DataArea') 

UPDATE [RecordDetails].[dbo].[Records]
SET [STAT_TG]  = 'DELETED'

FROM [RecordDetails].[dbo].[Records] 
WHERE  [STAT_TG]   = 'INSERTED'

 end

此表正在从另一个系统更新,并且始终在更新。对于开发需求,此查询计划为1秒。因此,有时当标志更新为[stat\u tg]=“deleted”时,没有检索到的记录也会更新为deleted,并且它们不会出现在输出xml文件中。所以有人能帮我做到这一点吗?

zujrkrfu

zujrkrfu1#

假设这些字段的类型都是varchar(10),下面是一个示例:

DECLARE @data TABLE
  (
    PXTXTP  VARCHAR(10)
  , PXTXCD  VARCHAR(10)
  , PXACCD  VARCHAR(10)
  );

UPDATE [RecordDetails].[dbo].[Records]
SET    [STAT_TG]='DELETED'
OUTPUT
  inserted.PXTXTP, inserted.PXTXCD, inserted.PXACCD
INTO @data
WHERE  [STAT_TG]='INSERTED';

SELECT *
FROM
       (SELECT PXTXTP, PXTXCD, PXACCD FROM @data) AS "Transaction"
FOR XML AUTO, ELEMENTS, ROOT('DataArea');

相关问题