0
我有一個xml,它有多個塊,如下所示。如何使用SQL Server從xml的子項目列表中獲取父項值?
declare @Query as xml,
@poxmldoc INT
set @Query='<ProductionOrder><Header><MessageID>00000005</MessageID></Header><Body>ProductionOrderDetails>Workorder_ID>100</Workorder_ID<Item_ID>4010124</Item_ID<Publisheddata></Publisheddata><BOM><Position>1</Position><Item_ID>111</Item_ID><BOM_Qty>100</BOM_Qty><UoM>Liters</UoM>
</BOM><BOM><Position>2</Position><Item_ID>222</Item_ID><BOM_Qty>101</BOM_Qty><UoM>Kilograms</UoM></BOM><BOM><Position>3</Position><Item_ID>333</Item_ID><BOM_Qty>102</BOM_Qty><UoM>Kilograms</UoM></BOM></ProductionOrderDetails><ProductionOrderDetails><Workorder_ID>101</Workorder_ID><Item_ID>4010124</Item_ID><Publisheddata></Publisheddata><BOM><Position>1</Position><Item_ID>111</Item_ID><BOM_Qty>103</BOM_Qty><UoM>Liters</UoM></BOM><BOM><Position>2</Position><Item_ID>222</Item_ID><BOM_Qty>104</BOM_Qty><UoM>Kilograms</UoM></BOM><BOM><Position>3</Position><Item_ID>333</Item_ID><BOM_Qty>105</BOM_Qty><UoM>Kilograms</UoM></BOM></ProductionOrderDetails></Body></ProductionOrder>'
當我執行此查詢
EXEC SP_XML_PREPAREDOCUMENT @poxmldoc OUTPUT, @Query
SELECT *
FROM OPENXML(@poxmldoc, '/ProductionOrder/Body/ProductionOrderDetails/BOM',2)
WITH (Position INT 'Position',
Item_ID NVARCHAR(40) 'Item_ID',
BOM_Qty FLOAT 'BOM_Qty',
UoM NVARCHAR(40) 'UoM')
我得到這樣的輸出:
Position Item_ID BOM_Qty UoM
------------------------------------
1 111 100 Liters
2 222 101 Kilograms
3 333 102 Kilograms
1 111 103 Liters
2 222 104 Kilograms
3 333 105 Kilograms
如何使用這個結果相處的<Workorder_ID>
標記值。
像這樣:
Position Item_ID BOM_Qty UoM Wo_Id
---------------------------------------------
1 111 100 Liters 100
2 222 101 Kilograms 100
3 333 102 Kilograms 100
1 111 103 Liters 101
2 222 104 Kilograms 101
3 333 105 Kilograms 101
我的xml也會有命名空間。那麼我們如何才能得到result.ex: – user3237193
@ user3237193:如果您有XML名稱空間,請查看T-SQL中的WITH XMLNAMESPACES()'構造 - 請參閱[官方MSDN文檔](http:// msdn .microsoft.com/EN-US /庫/ ms177607.aspx) –