此sp_send_dbmail
脚本适用于我们的某个流程。它附加一个Excel文件,其中包含任何查询。它知道这样做是因为文件名(.xls)的扩展名。
但是,它会将varchar(50)
字段更改为数字字段,并删除前导零。这是一种已知的烦恼,以百万种方式处理,对我的过程无效。
EXEC msdb.dbo.sp_send_dbmail
@profile_name = @profileName
,@recipients = @emailRecipientList
,@subject = @subject
,@importance = @importance
,@body = @emailMsg
,@body_format = 'html'
,@query = @QuerySQL
,@execute_query_database = @QueryDB
,@attach_query_result_as_file = 1
,@query_attachment_filename = @QueryExcelFileName
,@query_result_header = 1
,@query_result_width = @QueryWidth
,@query_result_separator = @QuerySep
,@query_result_no_padding = 1
下面的问题示例:这个简单的查询将StringNumber列从varchar更改为Excel中的数字,并删除零。
SELECT [RowID],[Verbage], StringNumber FROM [dbo].[tblTestStringNumber]
在SQL Server中(所需格式):
在Excel中(缺少前导零):
现在,可能有办法。我只是这样说,因为在SQL Server 2016结果窗格中,如果右键单击左上角,则会显示“在Excel中打开”选项
和。 。 。 。击鼓 。 。 。数据集在Excel中打开,前导零仍在那里!
答案 0 :(得分:1)
如果您在Excel中使用单引号(')开始一个数字,它会将其解释为字符串,因此常见的解决方案是更改查询以添加一个:
SELECT [RowID]
,[Verbage]
, StringNumber = '''' + [StringNumber]
FROM [dbo].[tblTestStringNumber]
Excel通常不会显示单引号,因为它知道它是一种转换为字符串类型的方式。
答案 1 :(得分:0)
@JustJohn,我认为它可以很好地工作:
SELECT [RowID]
,[Verbage]
, '="' + [StringNumber]+ '"' StringNumber
FROM [dbo].[tblTestStringNumber]