首页 > 解决方案 > SQL Server 存储过程 - 表到 XML 对象

问题描述

我需要编写一个存储过程,它可以从 SQL Server 表中的值创建以下输出:

<object>
  <ValueList>
    <Value value="1" text="Name" enabled="1" alias="Alias" />
    <Value value="2" text="Name" enabled="1" alias="Alias" />
    <Value value="3" ....
    ...
    ...
  </ValueList>
</object>

我尝试使用以下过程将我的表转换为 XML:

select TXT as [text]
from lit_geography
for XML raw ('value'), root('object')

然后我得到以下

<object>
  <value text="Midler tidig havn" />
  <value text="Færgehavnsvej" />
  <value text="Sydhavnsvej" />
  <value text="Ø-Pladsen" />
  <value text="Havnepladsen" />
</object>

去做:

标签: sql-serverxmlstored-procedures

解决方案


对于增量值,您可以使用Row_Number()

例子

Select (
         Select [value]   = row_number() over (Order by (select null))
               ,[text]    = txt
               ,[enabled] = 1
               ,[alias]   = 'Alias'
          From  lit_geography
          For XML Raw('Value'),type
        )
 For XML Path('ValueList'),Root('object')

退货

<object>
  <ValueList>
    <Value value="1" text="Midler tidig havn" enabled="1" alias="Alias" />
    <Value value="2" text="Færgehavnsvej" enabled="1" alias="Alias" />
    <Value value="3" text="Sydhavnsvej" enabled="1" alias="Alias" />
    <Value value="4" text="Ø-Pladsen" enabled="1" alias="Alias" />
    <Value value="5" text="Havnepladsen" enabled="1" alias="Alias" />
  </ValueList>
</object>

编辑 - 请求更新

 Update lit_formfield set [Values] = (
 Select (
         Select [value]   = row_number() over (Order by (select null))
               ,[text]    = txt
               ,[enabled] = 1
               ,[alias]   = 'Alias'
          From  lit_geography
          For XML Raw('Value'),type
        )
 For XML Path('ValueList'),Root('object')
 )
 Where Label = 'listbox'

推荐阅读