基于存储在SQLServerXML列中的数据生成字符串
我一直在尝试编写这个查询,但到目前为止,没有任何效果 以下是SQL Server中XML列的部分数据:基于存储在SQLServerXML列中的数据生成字符串,sql,sql-server,xml,tsql,Sql,Sql Server,Xml,Tsql,我一直在尝试编写这个查询,但到目前为止,没有任何效果 以下是SQL Server中XML列的部分数据: <DashboardWidgets> <DashboardWidget id="14"> <EnumName>PersonalProgressIndividual</EnumName> <OnOff>1</OnOff> <Movable>0</Mov
<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>
我可以通过提取所有的值来接近,但根本没有任何分隔符
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)
;
如果您能提供任何帮助或向正确的方向提出建议,我们将不胜感激。Wow!约翰,我真是太感谢你了。这正是我所需要的,而且非常有效!干杯@webface很乐意帮忙:)
Declare @XML 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>'
Select Stuff((Select Distinct '|' +String
From (
Select String = f.n.value('@id','varchar(50)')
+','
+f.n.value('(OnOff)[1]','varchar(50)')
+','
+f.n.value('(Movable)[1]','varchar(50)')
+','
+f.n.value('(Removable)[1]','varchar(50)')
From @XML.nodes('DashboardWidgets/DashboardWidget/SubItemData') t(n)
Cross Apply t.n.nodes('SubItem ') f(n)
) X
For XML Path ('')),1,1,'')
Declare @XML 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>'
Select Stuff((Select Distinct '|' +String
From (
Select String = f.n.value('@id','varchar(50)')
+','
+f.n.value('(OnOff)[1]','varchar(50)')
+','
+f.n.value('(Movable)[1]','varchar(50)')
+','
+f.n.value('(Removable)[1]','varchar(50)')
From @XML.nodes('DashboardWidgets/DashboardWidget/SubItemData') t(n)
Cross Apply t.n.nodes('SubItem ') f(n)
) X
For XML Path ('')),1,1,'')
1,1,1,1|2,1,1,1|3,1,1,1|4,0,0,0|6,0,0,0