0
これまではこのクエリを作成しようとしていましたが、これまで役に立たなかったのです。SQL ServerのXML列に格納されたデータに基づいて文字列を構築する
次は、SQL ServerのXML列からのいくつかの部分のデータである。
<DashboardWidgets>
<DashboardWidget id="14">
<EnumName>PersonalProgressIndividual</EnumName>
<OnOff>1</OnOff>
<Movable>0</Movable>
<Removable>0</Removable>
<SubItemData>
<SubItem id="1">
<OnOff>1</OnOff>
<Movable>1</Movable>
<Removable>1</Removable>
</SubItem>
<SubItem id="2">
<OnOff>1</OnOff>
<Movable>1</Movable>
<Removable>1</Removable>
</SubItem>
<SubItem id="3">
<OnOff>1</OnOff>
<Movable>1</Movable>
<Removable>1</Removable>
</SubItem>
<SubItem id="4">
<OnOff>0</OnOff>
<Movable>0</Movable>
<Removable>0</Removable>
</SubItem>
<SubItem id="6">
<OnOff>0</OnOff>
<Movable>0</Movable>
<Removable>0</Removable>
</SubItem>
</SubItemData>
</DashboardWidget>
</DashboardWidgets>
私の目標は、テーブルを照会し、IDおよび値のフォーマットされた文字列を取得することです。
例として、IDが14のDashboardWidgetノードを照会し、その中に含まれるSubItemData子ノードから文字列を構築する必要があります。
14のIDとダッシュボードウィジェットのクエリに必要な文字列の結果は次のようになります。
"1,1,1,1|2,1,1,1|3,1,1,1|4,0,0,0|6,0,0,0"
私はすべての値を抽出することではなく、すべての任意の区切り文字なしに近づくことができました。
DECLARE
@companyID INT = 23
,@dwID INT = 14
;
DECLARE @xml xml
SELECT @xml = c.DashboardWidgetSettings FROM dbo.Company c WHERE c.CompanyID = @companyID;
SELECT
x.Rec.query('./SubItem').value('.', 'varchar(max)') AS 'SubItemData'
FROM @xml.nodes('/DashboardWidgets/DashboardWidget[@id=sql:variable("@dwID")]/SubItemData') as x(Rec)
;
どのようなヘルプや正しい方向のポイントがあれば幸いです。
うわー!私は十分にあなたに感謝することはできません、ジョン。それはまさに私が必要としていて、完璧に動作します!乾杯! – webface
@webfaceお手伝いします:) –