Ако приемем, че вашият примерен XML изглежда по следния начин:
<MissingDS>
<MissingTable>
<MissingColumn>abc</MissingColumn>
<TableName>tblMyTable</TableName>
<PhysicalColName>table_abc</PhysicalColName>
<Grantor_Grantee>nobody</Grantor_Grantee>
</MissingTable>
<MissingTable>
<MissingColumn>xyu</MissingColumn>
<TableName>tblMyTable2</TableName>
<PhysicalColName>table_xyz</PhysicalColName>
<Grantor_Grantee>nobody2</Grantor_Grantee>
</MissingTable>
</MissingDS>
След това можете да анализирате това с новата поддръжка на SQL Server 2005 XQuery по следния начин:
DECLARE @MissingXML XML
SET @MissingXML = CAST(@MissingRecordsXML AS XML)
SELECT
Missing.Rec.value('(MissingColumn)[1]', 'varchar(1000)') AS 'MissingColumn',
Missing.Rec.value('(TableName)[1]', 'varchar(100)') AS 'TableName',
Missing.Rec.value('(PhysicalColName)[1]', 'varchar(100)') AS 'Physical',
Missing.Rec.value('(Grantor_Grantee)[1]', 'varchar(100)') AS 'Grantor_Grantee'
FROM
@MissingXML.nodes('/MissingDS/MissingTable') AS Missing(Rec)
Разбира се, ако можете да го ИЗБЕРЕТЕ, можете също така да ВМЪКНЕТЕ същите редове с данни в таблица доста лесно:
INSERT INTO
dbo.MissingDSTable(MissingColumn, TableName, PhysicalColName, Grantor_Grantee)
SELECT
Missing.Rec.value('(MissingColumn)[1]', 'varchar(1000)') AS 'MissingColumn',
Missing.Rec.value('(TableName)[1]', 'varchar(100)') AS 'TableName',
Missing.Rec.value('(PhysicalColName)[1]', 'varchar(100)') AS 'Physical',
Missing.Rec.value('(Grantor_Grantee)[1]', 'varchar(100)') AS 'Grantor_Grantee'
FROM
@MissingXML.nodes('/MissingDS/MissingTable') AS Missing(Rec)
Надявам се това да помогне малко
Марк