Может быть, это поможет вам:
DECLARE @xml XML=
N'<RelOp EstimatedExecutionMode="Row" EstimateRewinds="0" EstimateRebinds="0" Parallel="1" EstimatedTotalSubtreeCost="92.6757" AvgRowSize="349" EstimateCPU="0.0439447" EstimateIO="0" EstimateRows="179.753" LogicalOp="Repartition Streams" PhysicalOp="Parallelism" NodeId="3">
<OutputList>
<ColumnReference Table="[REALESTATECONTRACT2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="ODS_REGIONCODE" Alias="[REC2]"/>
<ColumnReference Table="[REALESTATECONTRACT2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PRIMARYLOCATIONTRIIDTX" Alias="[REC2]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PATHTX" Alias="[SP]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PARENTIDSY" Alias="[SP]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PARENTFLOORTX" Alias="[SP]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PARENTBUILDINGTX" Alias="[SP]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="NAMETX" Alias="[SP]"/>
<ColumnReference Table="[BUILDING1]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="STATEPROVTX" Alias="[BLD]"/>
<ColumnReference Table="[BUILDING2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="COUNTRYTX" Alias="[BLD2]"/>
<ColumnReference Table="[BUILDING2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="CITYTX" Alias="[BLD2]"/>
<ColumnReference Table="[BUILDING2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="ACTIVESTARTDA" Alias="[BLD2]"/>
</OutputList>
<Parallelism PartitioningType="Hash">
<PartitionColumns>
<ColumnReference Table="[REALESTATECONTRACT2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PRIMARYLOCATIONTRIIDTX" Alias="[REC2]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="NAMETX" Alias="[SP]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PATHTX" Alias="[SP]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PARENTIDSY" Alias="[SP]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PARENTFLOORTX" Alias="[SP]"/>
<ColumnReference Table="[SPACE]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="PARENTBUILDINGTX" Alias="[SP]"/>
<ColumnReference Table="[BUILDING2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="CITYTX" Alias="[BLD2]"/>
<ColumnReference Table="[BUILDING1]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="STATEPROVTX" Alias="[BLD]"/>
<ColumnReference Table="[BUILDING2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="COUNTRYTX" Alias="[BLD2]"/>
<ColumnReference Table="[BUILDING2]" Schema="[Tririga]" Database="[TRI_INTL_CERT]" Column="ACTIVESTARTDA" Alias="[BLD2]"/>
</PartitionColumns>
</Parallelism>
</RelOp>';
- я использую две переменные, вы можете адаптировать это к вашим потребностям
DECLARE @tableName VARCHAR(100)='[BUILDING2]';
DECLARE @ColumnName VARCHAR(100)='COUNTRYTX'
- Это будет использовать Xpath / XQuery
вызвать глубокий поиск (//
) для <ColumnReference>
, но он вернет только строки, в которых выполнен предикат.
SELECT a.query('.')
FROM @xml.nodes(N'//ColumnReference[@Table=sql:variable("@tableName")
and @Column=sql:variable("@ColumnName")]') A(a);
UPDATE
Этот запрос вернет строку в столбцах:
DECLARE @tableName VARCHAR(100)='[BUILDING2]';
DECLARE @ColumnName VARCHAR(100)='COUNTRYTX'
SELECT a.value('@Table','nvarchar(max)') AS TableName
,a.value('@Schema','nvarchar(max)') AS SchemaName
,a.value('@Database','nvarchar(max)') AS DatabaseName
,a.value('@Column','nvarchar(max)') AS ColumnName
,a.value('@Alias','nvarchar(max)') AS Alias
FROM @xml.nodes(N'//ColumnReference[@Table=sql:variable("@tableName")
and @Column=sql:variable("@ColumnName")]') A(a)