当列名太长时换行文本?

时间:2016-12-13 20:30:44

标签: sql-server sql-server-2008

我有这个发送电子邮件的脚本:

USE msdb
EXEC sp_send_dbmail
@profile_name = 'Mail list',
@recipients = 'bob.jones@company.com',
@subject = 'query results',
@body = 'Result from SELECT appended below.',
@execute_query_database = 'DB',
@query = 'exec usp_DisplayData'

问题是许多列(或它们的别名)非常长,因此电子邮件中的查询结果将如下所示:

SDMI POS Sales Name SDMI POS Purchases
------------------- ------------------
1              Joe  3

没有html,是否有一种方法可以将文本包装在列中,以便在电子邮件中看起来像这样?

SDMI  POS Name SDMI POS
Sales          Purchases
--------- ---- ---------
1         Joe  3

usp_DisplayData是一个简单的查询,如下所示:

Create procedure usp_usp_DisplayData
as
select 
cast(sales as varchar(16))  as 'SDMI POS Sales',
Name,
cast(purch as varchar(16))  as 'SDMI POS Purchases',
from Sales

1 个答案:

答案 0 :(得分:0)

如果您尝试在列别名中插入换行符,则没有运气。在换行符后,纯文本将始终返回到第一个字符。这不会意识到列......

如果可能(取决于您的电子邮件的目标系统),您应该使用0x1110格式化表格。

在上一条评论中,您会询问function of the linked answer

ulong将一个 function sortFlights(sortBy) { var flightDivs = $("#flights-results .flight-result"); flightDivArray = $.makeArray(flightDivs); var sortedFlights = flightDivArray.sort(function(a, b){ return $(a).data(sortBy)-$(b).data(sortBy); }); $("#flights-results .flight-result").remove(); $("#flights-results").append(flightDivArray); } 类型的参数作为输入(如果您使用带有类名的版本,则更多)并返回一个XML(实际上是XHTML)。

诀窍是,以下内容返回单个标量XML

HTML

内部dbo.CreateHTMLTable()以XML格式返回,它包含在paranthesis中,因此它将是外部XML中的单个列。 (有关详情,例如约SELECT ( SELECT * FROM SomeWhere FOR XML RAW,TYPE ) AS TheXmlResult; ,请阅读相关答案的背景)。

调用很容易(要注意双倍的限制):

SELECT

就是这样......返回值是完整的select - 表。

ELEMENTS XSINIL有一个参数可将格式指定为SELECT dbo.CreateHTMLTable((***your select here*** FOR XML RAW,ELEMENTS XSINIL)) 。我认为这是

xhtml

顺便说一句:错误使用存储过程

你的存储过程是错误的工具(使用啤酒瓶锤击钉子但是......)

sp_send_dbmail

SP已创建以执行某些操作。你的SP在没有其他任何内容,然后阅读。这可以更好地打包到html中,或者,如果有参数,则打包到内联表值函数 ...

您可以将此@body_format = 'HTML' 直接放入调用上述函数的语句中

Create procedure usp_usp_DisplayData
as
select 
[...]