Sql server 列名过长时是否换行文本?
我有一个发送电子邮件的脚本:Sql server 列名过长时是否换行文本?,sql-server,sql-server-2008,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'
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
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
如果没有html,是否有一种方法可以将文本包装在列中,使其在电子邮件中看起来像这样
SDMI POS Name SDMI POS
Sales Purchases
--------- ---- ---------
1 Joe 3
usp\u DisplayData
是一个简单的查询,如下所示:
SDMI POS Sales Name SDMI POS Purchases
------------------- ------------------
1 Joe 3
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
如果您试图在列别名中插入换行符,您将没有运气。换行后,纯文本将始终返回到第一个字符。这将不知道列 如果可能(取决于电子邮件的目标系统),您应该使用
HTML
设置表格格式
在您最后的评论中,您询问了有关问题
dbo.CreateHTMLTable()
将一个类型为XML
的参数作为输入(如果使用具有类名的版本,则会有更多参数),并返回一个XML(实际上是XHTML)
诀窍在于,下面返回一个单一的标量XML
SELECT
(
SELECT * FROM SomeWhere FOR XML RAW,TYPE
) AS TheXmlResult;
内部的SELECT
返回为XML,它被包装在paradensis中,因此它将是外部SELECT
中的一列。(有关详细信息,例如关于元素XSINIL
,请阅读链接答案的背景)
打电话很容易(注意这一点):
就这样。。。返回值是完整的xhtml
-表
sp\u send\u dbmail
具有一个参数,用于将格式指定为html
。我想这是
@body_format = 'HTML'
顺便说一句:存储过程的错误使用
您的存储过程是用于此目的的错误工具(用啤酒瓶敲打钉子是可行的,但是…)
创建SP是为了做某事。您的SP不执行任何其他操作,只执行读取操作。这更好地打包到视图中,或者,如果有参数,打包到内联表值函数中
您可以将此SELECT
直接放入调用上述函数的语句中
DECLARE @body XML=
(
SELECT dbo.CreateHTMLTable
(
(
select cast(sales as varchar(16)) as 'SDMI POS Sales'
,Name
,cast(purch as varchar(16)) as 'SDMI POS Purchases'
from Sales
FOR XML RAW,ELEMENTS XSINIL
)
)
);
如果您试图在列别名中插入换行符,您将没有运气。换行后,纯文本将始终返回到第一个字符。这将不知道列
如果可能(取决于电子邮件的目标系统),您应该使用HTML
设置表格格式
在您最后的评论中,您询问了有关问题
dbo.CreateHTMLTable()
将一个类型为XML
的参数作为输入(如果使用具有类名的版本,则会有更多参数),并返回一个XML(实际上是XHTML)
诀窍在于,下面返回一个单一的标量XML
SELECT
(
SELECT * FROM SomeWhere FOR XML RAW,TYPE
) AS TheXmlResult;
内部的SELECT
返回为XML,它被包装在paradensis中,因此它将是外部SELECT
中的一列。(有关详细信息,例如关于元素XSINIL
,请阅读链接答案的背景)
打电话很容易(注意这一点):
就这样。。。返回值是完整的xhtml
-表
sp\u send\u dbmail
具有一个参数,用于将格式指定为html
。我想这是
@body_format = 'HTML'
顺便说一句:存储过程的错误使用
您的存储过程是用于此目的的错误工具(用啤酒瓶敲打钉子是可行的,但是…)
创建SP是为了做某事。您的SP不执行任何其他操作,只执行读取操作。这更好地打包到视图中,或者,如果有参数,打包到内联表值函数中
您可以将此SELECT
直接放入调用上述函数的语句中
DECLARE @body XML=
(
SELECT dbo.CreateHTMLTable
(
(
select cast(sales as varchar(16)) as 'SDMI POS Sales'
,Name
,cast(purch as varchar(16)) as 'SDMI POS Purchases'
from Sales
FOR XML RAW,ELEMENTS XSINIL
)
)
);
为什么没有html?这是演示工具应该管理的。。。即使您使用动态创建的SQL,其中可能会在列的别名中包含换行符,这也不会在纯文本系统中按预期显示。有一些工具可以创建ASCII
表(仅使用固定宽度字体,如courier new
)只需提及:提供了一种完全通用的方法来从任何给定的SELECT
创建html
表,并完全支持CSS
。我的意思是,理论上,如果需要,您可以在过程中手动添加换行符。e、 g.cast(销售为varchar(16))作为“sdmi pos”
然后在新的一行sales'
@Shnugo上,我看到了类似的答案。问题是,如何在存储过程中使用函数dbo.CreateHTMLTable
,而不是SELECT
查询?为什么没有html?这是演示工具应该管理的。。。即使您使用动态创建的SQL,其中可能会在列的别名中包含换行符,这也不会在纯文本系统中按预期显示。有一些工具可以创建ASCII
表(仅使用固定宽度字体,如courier new
)只需提及:提供了一种完全通用的方法来从任何给定的SELECT
创建html
表,并完全支持CSS
。我的意思是,理论上,如果需要,您可以在过程中手动添加换行符。e、 g.cast(销售为varchar(16))作为“sdmi pos”
然后在新的一行sales'
@Shnugo上,我看到了类似的答案。问题是,如何将函数dbo.CreateHTMLTable
与存储过程一起使用,而不是使用SELECT
查询?问题是SP很长而且相当复杂。我将此SP作为示例发布,因为我不知道select语句是否相关。您知道返回表的结构吗?如果是这样,您可以声明或创建一个具有正确结构的临时表,并使用插入到可清空的EXEC MySP
将结果集放入表中。此表可与一个简单的从选项卡中选择*一起使用。如果结果集更复杂,可以将添加到SomeNewTab中