如何通过TSQL反序列化SQL Server中FOR XML RAW生成的XML并实现目标表的UPSERT操作
求助:SQL Server中如何反序列化XML PAYLOAD并实现UPSERT/动态操作?
最近我用SQL Server的FOR XML RAW生成了大量XML数据,把这些数据存在了一张操作日志表里,表的结构是这样的:
ACTION CHAR(1):操作类型,I代表插入、U代表更新、D代表删除TABLE_NAME NVARCHAR(25):要执行操作的目标表名称PAYLOAD NVARCHAR(MAX):用FOR XML RAW序列化出来的XML,格式大概是<row COL1="val_col_1" COL2="val_col_2" .. COLN="val_col_n"/>
表里现在有这些示例数据:
ACTION | TABLE_NAME | PAYLOAD -------|------------|--------- I | tbl_1 | xmlrow_1 I | tbl_1 | xmlrow_2 U | tbl_1 | xmlrow_3 D | tbl_1 | xmlrow_4 D | tbl_2 | xmlrow_5
我现在要写一个存储过程,核心需求是:把PAYLOAD里的XML反序列化后,根据ACTION和TABLE_NAME对目标表执行对应的操作。我最想先实现**UPSERT(插入更新)**的功能,如果这个方案走不通的话,退而求其次用动态SQL来做插入、更新、删除,但不管哪种方式,首先得解决XML反序列化的问题——比如我想实现类似下面的更新逻辑:
UPDATE [dbo].[tbl_1] SET [COL1] = CURRENT_ROW.COL1 ,[COL2] = CURRENT_ROW.COL2 ,[COL3] = CURRENT_ROW.COL3 FROM ( -- 这里放反序列化xmlrow_3的结果 ) AS CURRENT_ROW
有没有大佬能给我指点下怎么实现?
内容的提问来源于stack exchange,提问作者Skary
相关产品推荐
相关产品推荐

