如何用内联CSS右对齐SQL FOR XML生成的表格最后3列
如何用SQL FOR XML生成右对齐最后3列的HTML表格(邮件场景)
我需要通过SQL的FOR XML语句生成HTML表格,要求最后3列右对齐(示例代码已隐去表头)。由于表格将用于邮件发送,只能使用内联CSS样式。我曾尝试使用td:nth-last-child(-n+3)=text-align: right;,但始终无效,请问该如何实现最后3列的右对齐?
原生成代码
SET @xml = ( SELECT [Cat] AS 'td','', [SubCat] AS 'td','', [Total1] AS 'td','', [Total2] AS 'td', '', [Total3] AS 'td', '' FROM @SumTable ORDER BY Sort FOR XML PATH('tr'), ELEMENTS ) Set @XML = replace(@XML,'<td>','<td style= " border: 1px solid lightgray; padding: 4px; ">') Select @xml
可行解决方案
核心思路是:先在FOR XML生成时用临时标签区分不同样式的单元格,再通过字符串替换将临时标签替换为带对应内联CSS的<td>标签,精准控制指定列的对齐样式。
修改后的代码如下:
SET @xml = ( SELECT [Cat] AS 'tdt','', -- TDT:普通文本单元格 [SubCat] AS 'tdt','', -- TDT:普通文本单元格 [Total1] AS 'tdr','', -- TDR:右对齐单元格 [Total2] AS 'tdr', '', -- TDR:右对齐单元格 [Total3] AS 'tdrb', '' -- TDRB:右对齐且加粗的单元格 FROM @sumtable ORDER BY sort,[FT or PT],EnrollEndDtYm FOR XML PATH('tr'), ELEMENTS ) -- 替换临时标签为带样式的<td> Set @XML = replace(@XML,'<tdt>','<td style= " border: 1px solid lightgray; padding: 4px; ">') Set @XML = replace(@XML,'<tdr>','<td style= " text-align: right; border: 1px solid lightgray; padding: 4px; ">') Set @XML = replace(@XML,'<tdrb>','<td style= " text-align: right; font-weight: bold; border: 1px solid lightgray; padding: 4px; ">') -- 替换结束标签 Set @XML = replace(@XML,'</tdt>','</td>') Set @XML = replace(@XML,'</tdr>','</td>') Set @XML = replace(@XML,'</tdrb>','</td>')
内容的提问来源于stack exchange,提问作者PowerUser
相关产品推荐
相关产品推荐

