select (select BraCode as 'td' for xml path(''), type), (select BraName as 'td' for xml path(''), type), (select BraPrefix as 'td' for xml path(''), type) from Bra_Mst for xml path('tr')
效果
<tr> <td>HKG</td> <td>Hong Kong</td> <td>HKG</td> </tr> <tr> <td>SHA</td> <td>Shanghai</td> <td>SHA</td> </tr>
加上标题
select (select 'Problem' as th for xml path(''), type), (select 'Onset' as th for xml path(''), type), (select 'Status' as th for xml path(''), type) union all select (select p.ProblemType as 'td' for xml path(''), type), (select p.Onset as 'td' for xml path(''), type), (select p.DiagnosisStatus as 'td' for xml path(''), type) from tblProblemList p where p.PatientUnitNumber = @PatientUnitNumber for xml path('tr')
————————————————————————————————————————————————————
https://www.codenong.com/7086393/
与其使用FOR XML PATH('tr'),不使用FOR XML RAW('tr'),ELEMENTS。这将防止将值连接在一起,并提供非常干净的输出,查询如下所示:
SELECT p.ProblemType AS td, p.Onset AS td, p.DiagnosisStatus AS td FROM tblProblemList p WHERE p.PatientUnitNumber = @PatientUnitNumber FOR XML RAW('tr'), ELEMENTS用纯标记附加标题行,这样可以更好地控制正在发生的事情。完整的代码块如下所示:
DECLARE @body NVARCHAR(MAX) SET @body = N'<table>' + N'<tr><th>Problem</th><th>Onset</th><th>Status</th></tr>' + CAST(( SELECT p.ProblemType AS td, p.Onset AS td, p.DiagnosisStatus AS td FROM tblProblemList p WHERE p.PatientUnitNumber = @PatientUnitNumber FOR XML RAW('tr'), ELEMENTS ) AS NVARCHAR(MAX)) + N'</table>'想根据格式化输出表的需要增加一些额外的价值。" AS td"别名将在标记中生成value元素,但这不是因为它知道表单元格是td。这种断开连接使我们可以创建伪造的HTML元素,这些元素可以在查询执行后稍后进行更新。例如,如果我想使ProblemType值居中对齐,则可以调整元素名称以允许这样做。我不能在元素名称中添加样式或类,因为它破坏了SQL中的别名命名约定,但是我可以创建一个新的元素名称,例如tdc。这将产生value元素。尽管这在任何情况下都不是有效的标记,但是replace语句很容易处理。
DECLARE @body NVARCHAR(MAX) SET @body = N'<table>' + N'<tr><th>Problem</th><th>Onset</th><th>Status</th></tr>' + CAST(( SELECT p.ProblemType AS tdc, p.Onset AS td, p.DiagnosisStatus AS td FROM tblProblemList p WHERE p.PatientUnitNumber = @PatientUnitNumber FOR XML RAW('tr'), ELEMENTS ) AS NVARCHAR(MAX)) + N'</table>' SET @body = REPLACE(@body, '<tdc>', '<td class="center">') SET @body = REPLACE(@body, '</tdc>', '</td>')
这将创建格式为value的单元格元素。在字符串的顶部有一个快速块,您将可以通过简单的调整来使中心对齐的值。
我需要解决的另一种情况是在标记中包含链接。只要单元格中的值就是您在href中所需的值,就很容易解决。我将扩展示例,使其包含一个我希望链接到详细URL的ID字段。
DECLARE @body NVARCHAR(MAX) SET @body = N'<table>' + N'<tr><th>Problem</th><th>Onset</th><th>Status</th></tr>' + CAST(( SELECT p.ID as tda p.ProblemType AS td, p.Onset AS td, p.DiagnosisStatus AS td FROM tblProblemList p WHERE p.PatientUnitNumber = @PatientUnitNumber FOR XML RAW('tr'), ELEMENTS ) AS NVARCHAR(MAX)) + N'</table>' SET @body = REPLACE(@body, '<tda>', '<td><a href="http://mylinkgoeshere.com/id/') SET @body = REPLACE(@body, '</tda>', '">click-me</td>')此示例未考虑使用链接文本内部单元格中的值,但这是一些CHARINDEX工作可解决的问题。