Nic*_*sse 1 sql-server sp-send-dbmail sql-server-2005
我有下表:
CREATE TABLE [dbo].[MyTable](
[Day_ID] [nvarchar](50) NULL,
[SAS] [nvarchar](50) NULL,
[STAMP] [datetime] NULL DEFAULT (getdate())
)
Run Code Online (Sandbox Code Playgroud)
其中包含以下数据:
我还有一个 SP,它可以读取所有数据MyTable并将其在电子邮件正文中发送。
SET NOCOUNT ON;
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'MyMailProfile'
,@recipients = 'me@account.com'
,@subject = 'This is the object'
,@body = 'This is the body:'
,@body_format = 'TEXT'
,@query = 'SET NOCOUNT ON select [Day_ID],[SAS] from MyTable SET NOCOUNT OFF'
,@attach_query_result_as_file = 0
,@query_result_separator = '|'
,@exclude_query_output = 1
,@query_result_no_padding = 0
,@query_result_header = 0
,@append_query_error=1
Run Code Online (Sandbox Code Playgroud)
一切正常,但我的问题是,在体内结果如下所示:
2017_12_06_01 |Red
2017_12_06_02 |Yellow
2017_12_06_03 |Green
2017_12_06_04 |Blue
Run Code Online (Sandbox Code Playgroud)
换句话说,SQL Server 知道列的长度可能是 50 个字符,因此它们会用空格填充不包含字符的空间。如果您考虑到将数值写入列(例如 NUMERIC)时也会发生这种情况,那就非常无聊了。我尝试过 LTRIM 和 RTRIM 但没有任何改变。
我正在使用 SQL Server 2005。
该参数@query_result_no_padding应该允许您执行此操作。
将其更改为:
@query_result_no_padding = 0
Run Code Online (Sandbox Code Playgroud)
到
@query_result_no_padding = 1
Run Code Online (Sandbox Code Playgroud)
[ @query_result_no_padding ] @query_result_no_padding 类型是位。默认值为 0。设置为 1 时,不会填充查询结果,可能会减小文件大小。如果将 @query_result_no_padding 设置为 1 并设置 @query_result_width 参数,则 @query_result_no_padding 参数将覆盖 @query_result_width 参数。+ 在这种情况下不会发生错误。如果将 @query_result_no_padding 设置为 1 并设置 @query_no_truncate 参数,则会引发错误。