整数为零,上传到SQL Server时将忽略“0”

我有一个页面,允许用户上传一个Excel文件,并将数据插入Excel文件到SQL Server。 现在我有一个小问题,在Excel文件中有一个值为“001”,“029”,“236”的列。 当它插入到SQL Server时,前面的零会在SQL中被忽略,所以数据将变成“1”,“29”,“239”。 SQL中列的数据types是varchar(10)。 如何解决这个问题?

Excel似乎自动将单元格值转换为数字。 在处理之前,请尝试在Excel工作表中用单引号前缀单元格内容。 例如'001 。 如果你不能相信用户这样做,使用一个string格式化例程左填充数字零。

有些东西必须将excel单元格中的数据从一个string转换为一个整数。 你如何执行插入?

如果用户在Excel中input001,它将被转换为数字1。

如果用户input“001”到Excel中,它将作为文本保存在单元格中。

如果单元格的格式为数字格式“@”,那么当用户input001时,将以文本“001”input。 “@”数字格式告诉Excel单元格是一个文本单元格,并且任何条目(不pipe它看起来像是数字,date,时间,分数等等)都应该简单地放置在单元格中 – 作为文本细胞。

你能告诉你的用户用“@”预先格式化这个列吗? 这通常是处理这种情况的最可靠的方式,因为用户不必记得input“001”。

也许为Excel单元格设置数据types“文本”将有所帮助。

Excel可能是这里的罪魁祸首。 尝试转换您的文件到CSV,看看它是如何出来的。 如果前导零在新的CSV文件中消失,Excel是问题所在。

Excel总是这样做,而且它是一个新生事物。 我知道有三种解决方法:

  1. 在Excel中的任何单元格input数据之前,将单元格格式化为文本格式(如果需要,可以做一个整列)。只有在控制电子表格和用户时,这才起作用:-)。

  2. 假设您将在Excel数据中混合使用数字和/或文本,并在导入前在Excel中对其进行修复:在电子表格中添加一列,并使用TEXT()函数将该数字转换为文本,如in = TEXT (A2,“000”); 填写下来。 还假定您可以编辑工作表。

  3. 假设你必须在你的代码中插入数字。 根据你如何加载数据,这可能发生在T-SQL或其他代码中。 在TSQL中,这个expression式的作用是用零填充3个字符的宽度:right('000'+ cast(2 as varchar(3)),3)