在制作Excel文件时,SQL Server 2014引导了零。 。 。 但。

这个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 

下面的问题的例子:这个简单的查询将Excel中的StringNumber列从varchar更改为数字,并删除零。

 SELECT [RowID],[Verbage], StringNumber FROM [dbo].[tblTestStringNumber] 

在SQL Server中(所需的格式):

表在SQL Server中的视图

在Excel(导致零缺less)后:

Excel结果没有前导零

现在,可能有办法。 我只是这样说的,因为在SQL Server 2016的结果窗格中,如果右键单击左上angular,它会提供“在Excel中打开”

右键单击以在Excel中打开

和。 。 。 。 击鼓 。 。 。 数据集在Excel中打开,前导零仍然存在!

在这里输入图像说明

如果您在Excel中使用单引号(')开始编号,则它会将其解释为string,因此常见解决scheme是将查询更改为添加一个:

 SELECT [RowID] ,[Verbage] , StringNumber = '''' + [StringNumber] FROM [dbo].[tblTestStringNumber] 

而Excel通常不会显示单引号,因为它知道这是一种强制types转换的方式。