FOR XML EXPLICIT格式化输出

时间:2011-03-30 14:57:35

标签: sql-server for-loop

我有一个具有以下结构的表:

------------------------------------
invoice_id | device_id | terminal_id
------------------------------------
1          | SY000001  | GP000001
1          | SY000001  | GP000001
1          | SY999000  | GP999000
2          | SY111001  | GP111001

我想以下列格式从表中获取数据:

<a href="view_divece.aspx?id=SY000001">SY000001 [GP000001]</a>&nbsp;|&nbsp;
<a href="view_divece.aspx?id=SY999000">SY999000 [GP999000]</a>&nbsp;|&nbsp;

目前我能够以下列格式获得结果(没有分隔符“|”):

<a href="view_divece.aspx?id=SY000001">SY000001 [GP000001]</a>
<a href="view_divece.aspx?id=SY999000">SY999000 [GP999000]</a>

我的查询是:

SELECT DISTINCT
    1 as tag,
    null as parent,
    'view_device.aspx?id=' + device_id [a!1!href],
    device_id + ' [' + terminal_id + ']' [a!1!]
FROM DEALERS_SIMPAYMENTS 
WHERE 
    invoice_id = 1
FOR XML EXPLICIT

这是可能的,如果可能,怎么样?

SQL server 2008。

2 个答案:

答案 0 :(得分:1)

您不能只使用此查询来实现所需的结果吗?

SELECT
    DISTINCT
    '<a href="view_divece.aspx?id=' + 
    t.device_id + '">' + t.device_id + ' [' +
    t.terminal_id + ']</a>&nbsp;|&nbsp'
FROM DEALERS_SIMPAYMENTS t
WHERE t.invoice_id = 1

返回两个字符串:

<a href="view_divece.aspx?id=SY00001">SY00001 [GP00001]</a>&nbsp;|&nbsp
<a href="view_divece.aspx?id=SY999000">SY999000 [GP999000]</a>&nbsp;|&nbsp

答案 1 :(得分:0)

您似乎想要一个HTML片段而不是XML。在这种特殊情况下,我会选择字符串连接。类似的东西:

SELECT '<a href="view_divece.aspx?id=' + device_id + '">' + 
       device_id + ' [' + terminal_id + ']</a>&nbsp;|&nbsp;'
FROM DEALERS_SIMPAYMENTS
WHERE invoice_id=1

应该做的伎俩。这当然适用于您的简单示例,并且没有XML / HTML转义数据中的有趣字符和这些好东西。它还以单独的行返回条目。我不知道这是不是问题。