Sql server 如何在SQLServer2008中对XML列执行OrderBY
我正在为下面XML的dbName属性中指定的列创建一个逗号分隔的值。现在我想根据Position属性连接这些列Sql server 如何在SQLServer2008中对XML列执行OrderBY,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在为下面XML的dbName属性中指定的列创建一个逗号分隔的值。现在我想根据Position属性连接这些列 DECLARE @varXML AS XML = '<gridFormat> <column property="FacilityInternalID" dbName="Pname" HeaderText="TAT Health" IsVisible="1" Position="1
DECLARE @varXML AS XML =
'<gridFormat>
<column property="FacilityInternalID" dbName="Pname" HeaderText="TAT Health" IsVisible="1" Position="1" />
<column property="FacilityInternalID" dbName="Priority" HeaderText="Priority" IsVisible="1" Position="2" />
<column property="FacilityInternalID" dbName="JobID" HeaderText="Job Number" IsVisible="1" Position="3" />
<column property="FacilityInternalID" dbName="Status" HeaderText="Status" IsVisible="1" Position="6" />
<column property="FacilityInternalID" dbName="name" HeaderText="Customer" IsVisible="1" Position="4" />
<column property="FacilityInternalID" dbName="sname" HeaderText="Facility " IsVisible="1" Position="5" />
</gridFormat>'
PRINT @varXML
结果应该是
select Pname,Priority,JobID,name,sname,status FROM JobListingDetails.
请提供帮助。有关不使用光标进行字符串连接的酷方法,请参阅
它位于“使用基于集合的方法替换光标”部分下。有关不使用光标进行字符串连接的酷方法,请参阅
它位于“用基于集合的进近替换光标”部分下。这应该可以:
注意,您需要读取dbName属性
DECLARE @varXML AS XML =
'<gridFormat>
<column property="FacilityInternalID" dbName="Pname" HeaderText="TAT Health" IsVisible="1" Position="1" />
<column property="FacilityInternalID" dbName="Priority" HeaderText="Priority" IsVisible="1" Position="2" />
<column property="FacilityInternalID" dbName="JobID" HeaderText="Job Number" IsVisible="1" Position="3" />
<column property="FacilityInternalID" dbName="Status" HeaderText="Status" IsVisible="1" Position="6" />
<column property="FacilityInternalID" dbName="name" HeaderText="Customer" IsVisible="1" Position="4" />
<column property="FacilityInternalID" dbName="sname" HeaderText="Facility " IsVisible="1" Position="5" />
</gridFormat>'
PRINT @varXML
[编辑]已更新以包括订购人。基本上,您还可以从xml中读取position属性,然后按照以下顺序使用该属性:
declare @ColumnsToDisplay varchar(max)
DECLARE @varXML AS XML
set @varxml =
'<gridFormat>
<column property="FacilityInternalID" dbName="Pname" HeaderText="TAT Health" IsVisible="1" Position="1" />
<column property="FacilityInternalID" dbName="Priority" HeaderText="Priority" IsVisible="1" Position="2" />
<column property="FacilityInternalID" dbName="JobID" HeaderText="Job Number" IsVisible="1" Position="3" />
<column property="FacilityInternalID" dbName="Status" HeaderText="Status" IsVisible="1" Position="6" />
<column property="FacilityInternalID" dbName="name" HeaderText="Customer" IsVisible="1" Position="4" />
<column property="FacilityInternalID" dbName="sname" HeaderText="Facility " IsVisible="1" Position="5" />
</gridFormat>'
SELECT @ColumnsToDisplay = COALESCE(@ColumnsToDisplay + ',', '') + dbName
FROM
(
SELECT row.value('@dbName','varchar(200)') AS dbName, row.value('@Position','int') as pos
FROM @varXML.nodes('gridFormat/column')
AS d ( row )
) csv
order by pos
select 'SELECT ' + @ColumnsToDisplay + ' FROM JobListingDetails'
这应该起作用:
注意,您需要读取dbName属性
DECLARE @varXML AS XML =
'<gridFormat>
<column property="FacilityInternalID" dbName="Pname" HeaderText="TAT Health" IsVisible="1" Position="1" />
<column property="FacilityInternalID" dbName="Priority" HeaderText="Priority" IsVisible="1" Position="2" />
<column property="FacilityInternalID" dbName="JobID" HeaderText="Job Number" IsVisible="1" Position="3" />
<column property="FacilityInternalID" dbName="Status" HeaderText="Status" IsVisible="1" Position="6" />
<column property="FacilityInternalID" dbName="name" HeaderText="Customer" IsVisible="1" Position="4" />
<column property="FacilityInternalID" dbName="sname" HeaderText="Facility " IsVisible="1" Position="5" />
</gridFormat>'
PRINT @varXML
[编辑]已更新以包括订购人。基本上,您还可以从xml中读取position属性,然后按照以下顺序使用该属性:
declare @ColumnsToDisplay varchar(max)
DECLARE @varXML AS XML
set @varxml =
'<gridFormat>
<column property="FacilityInternalID" dbName="Pname" HeaderText="TAT Health" IsVisible="1" Position="1" />
<column property="FacilityInternalID" dbName="Priority" HeaderText="Priority" IsVisible="1" Position="2" />
<column property="FacilityInternalID" dbName="JobID" HeaderText="Job Number" IsVisible="1" Position="3" />
<column property="FacilityInternalID" dbName="Status" HeaderText="Status" IsVisible="1" Position="6" />
<column property="FacilityInternalID" dbName="name" HeaderText="Customer" IsVisible="1" Position="4" />
<column property="FacilityInternalID" dbName="sname" HeaderText="Facility " IsVisible="1" Position="5" />
</gridFormat>'
SELECT @ColumnsToDisplay = COALESCE(@ColumnsToDisplay + ',', '') + dbName
FROM
(
SELECT row.value('@dbName','varchar(200)') AS dbName, row.value('@Position','int') as pos
FROM @varXML.nodes('gridFormat/column')
AS d ( row )
) csv
order by pos
select 'SELECT ' + @ColumnsToDisplay + ' FROM JobListingDetails'
如何根据位置进行订购attribute@Rohit我已经更新了我的答案,以便根据职位属性排序。如何根据职位属性排序attribute@Rohit我已经更新了我的答案,以便根据position属性进行排序