Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 列名过长时是否换行文本?_Sql Server_Sql Server 2008 - Fatal编程技术网

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中