Как сделать OrderBY на столбце XML в SQL SERVER 2008 - PullRequest
1 голос
/ 22 апреля 2010

Я создаю разделенное запятыми значение столбцов, указанных в атрибуте dbName XML-файла ниже Теперь я хочу объединить эти столбцы на основе атрибута Position.

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

Это запрос, по которому я генерирую CSV столбцов. Я должен использовать его как список выбора.

        SELECT  @ColumnsToDisplay = LEFT(MyCsvList, LEN(MyCsvList) - 1)
        FROM    ( SELECT    ( SELECT    row.value('@property',
                                                  'varchar(200)') + ', ' AS [text()]
                              FROM      @varXML.nodes('gridFormat/column')
                                        AS d ( row )
                            FOR
                              XML PATH('')
                            ) AS MyCsvList
                ) AS MyCsvListFinal
        SET @SQL = 'SELECT ' + @ColumnsToDisplay
            + ' FROM JobListingDetails'

Результат должен быть

select Pname,Priority,JobID,name,sname,status FROM JobListingDetails.

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 22 апреля 2010

Это должно работать:

Обратите внимание, что вам нужно прочитать атрибут dbName.

[РЕДАКТИРОВАТЬ] Обновлено, чтобы включить порядок по. По сути, вы также читаете атрибут Postion из xml, а затем используете его в ORDER BY:

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' 
0 голосов
/ 22 апреля 2010

См. в этой статье , чтобы узнать, как сделать конкатенацию строк без курсора.

Он находится в разделе «Замена курсора подходом на основе SET».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...