0
Create Table #temp
(
Change varchar(20),
deleted_user_id int,
deleted_field_id int,
deleted_value   nvarchar (4000),
inserted_user_id  int,
inserted_field_id int,
inserted_value nvarchar (4000),
is_difference int,
)


insert into #temp values ('UPDATE','1', '11', '3,2,1,4','1','11','1,2,3,4','0')
insert into #temp values ('UPDATE','1', '12', '','1','12','1,2,3','0')
insert into #temp values ('UPDATE','2', '12', '1,2','2','12','','0')

select * from #temp

我正在使用 Microsoft SQL 服务器管理工​​作室

我正在尝试将删除的值与插入的值进行比较。如果存在差异,则将 is_difference 列设置为 1 或仅返回行。

到目前为止,我正在考虑进行字符串拆分。也许使用 stuff 功能。但不太确定如何在单个查询中使用所有这些,或者是否有任何其他选项。任何帮助表示赞赏。提前致谢

4

1 回答 1

1

这个查询到目前为止有效。

;with cte as 
(select isnull(deleted_user_id, inserted_user_id) as user_id,
    isnull(deleted_field_id, inserted_field_id) as field_id, 
    stuff(  
    (  
    SELECT ','+ value FROM STRING_SPLIT (deleted_value, ',') group by value order by value FOR XML PATH('')  
    ),1,1,'') as sorted_deleted_value , inserted_value 
    from #temp ) 
select * from cte where sorted_deleted_value <> inserted_value
于 2020-08-20T07:04:59.153 回答