SQL Server 2014在制作Excel文件时取消前导零。 。 。但是。

时间:2016-12-29 22:37:45

标签: sql-server excel

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中(所需格式):

View of table in SQL Server

在Excel中(缺少前导零):

Excel results with no leading zeroes

现在,可能有办法。我只是这样说,因为在SQL Server 2016结果窗格中,如果右键单击左上角,则会显示“在Excel中打开”选项

Right Click to Open in Excel

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

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您在Excel中使用单引号(')开始一个数字,它会将其解释为字符串,因此常见的解决方案是更改查询以添加一个:

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

Excel通常不会显示单引号,因为它知道它是一种转换为字符串类型的方式。

答案 1 :(得分:0)

@JustJohn,我认为它可以很好地工作:

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