TSQL:如何从 T1.Field_A 中的 XML 信息和 T2.Field_A 中的 nvarchar 的两个表中获取 UNION 结果

TSQL: How to get a UNION result from two tables with XML information in T1.Field_A and nvarchar in T2.Field_A

我有两个来自不同来源的独立数据输入表(一个直接插入,一个通过 API)。我正在尝试使用 UNION 命令从这两个表中获取统一的元组列表。不幸的是,字段 SourceEventID 的信息具有不同的源类型:

在表 1 中,SourceEventID 的信息存储在字段 IncidentRequest_XML 中的 xml 内(类型=xml)。
在表 2 中,此数据字段存储为字符串 (type = nvarchar)。

我的问题是:

Is it possible to get the result by using the union command in a different way and if not, how is it possible to get the unified list out of the two tables with the told circumstances?

非常感谢!

我尝试使用 UNION 命令获取结果,但它告诉我如下:

The data type xml cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.

SELECT
    row_number() OVER (PARTITION BY A.SourceSystem ORDER BY Date) as Row,
    IncidentRequest_XML.query('INCIDENT_REQUEST/SourceEventID') as SourceEventID,
    'FOO' as Type
FROM dbo.Source_A 
INNER JOIN dbo.ConfigTable C ON A.SourceSystem = C.SourceSystem
WHERE C.ReturnStatus = 1
UNION
SELECT
    row_number() OVER (PARTITION BY B.SourceSystem ORDER BY Date) as Row,
    SourceEventID,
    'BAR' as Type
FROM dbo.Source_B
INNER JOIN dbo.ConfigTable C ON B.SourceSystem = C.SourceSystem
WHERE C.ReturnStatus = 1

我期望的是以下结果:

ROW     SourceEventID                              Type
1       <SourceEventID>abc12345</SourceEventID>    FOO
2       testcall123                                BAR

如果您查看 预期结果 ,您会发现 XML 和字符串会混合在同一列中。这是不可能的...

您可以做的是使用 .value() 而不是 .query() 将 SourceEventId 读取为字符串:

IncidentRequest_XML.value('(INCIDENT_REQUEST/SourceEventID/text())[1]','nvarchar(100)')  as SourceEventID

或者您可以使用强制转换,将 .query() 的结果转换为字符串:

CAST(IncidentRequest_XML.query('INCIDENT_REQUEST/SourceEventID') AS NVARCHAR(100)) as SourceEventID

提示:.query() returns XML 类型的结果,它是 XQuery 表达式的结果。另一方面 .value() 只能处理单例值(因此我们需要 (blah)[1] 和特定类型。