ツリービュー コントロールのクエリには、テキスト値が "GrandChildOfFirstRow" に設定されているコントロールのデータ バインディングが原因で、例外をスローする空の要素が含まれている場合があります (要素に属性がない場合)。
xquery を使用してクエリでそれらを削除しましたが、これを行う別の方法や、空の要素を削除するためのよりスマートな方法はありますか (このクエリの適切なレコードには左外部結合が必要です)、それともxquery コードを短いコードに結合することが可能です。
クエリ:
declare @x as xml
set @x =
(
SELECT distinct
Table1.AssetObjID, Table1.Asset_ID , Table1.FromLR, Table1.AssetType + ', ' + Table1.StreetName + ', ' + Table1.FromMunicNo as FirstRow,
Table2.ACIObjID ,Table2.PAssetObjID, Table2.Feature_ID + ', ' + Table2.FeatureName AS ChildOfFirstRow,
Table3.ITMObjID ,Table3.Item_ID + ',' + Table3.[DESC] as GrandChildOfFirstRow
FROM Table1 left outer join
Table2 ON Table1.AssetObjID = Table2.PAssetObjID left outer join
Table3 ON Table1.AssetObjID = Table3.AssetObjID AND Table2.ACIObjID = Table3.ACIObjID
where Table1.AssetType ='xxxx'
for xml auto,root('xml')
)
--what it does is it only grabs one empty element and deletes only occurrences of that
--specific element for the whole file
--so If I have 2 or more elements which are empty in an xml file
--I will have to repeat that code each time
SET @x.modify('delete //*[not(node()) and not(./@*)]')
SET @x.modify('delete //*[not(node()) and not(./@*)]')