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

时间:2009-07-17 03:20:21

标签: asp.net sql-server excel etl

我有一个页面,允许用户上传excel文件并将excel文件中的数据插入SQL Server。现在我有一个小问题,excel文件中有一列有值,例如“001”,“029”,“236”。当它插入SQL Server时,SQL中将忽略前面的零,因此数据将变为“1”,“29”,“239”。 SQL中列的数据类型是varchar(10)。怎么解决这个问题?

6 个答案:

答案 0 :(得分:2)

Excel似乎会自动将单元格值转换为数字。在处理之前,尝试使用Excel工作表中的单引号为单元格内容添加前缀。例如'001。如果您不能信任用户这样做,请使用字符串格式化例程将数字填充为零。

答案 1 :(得分:1)

必须将excel单元格中的数据从字符串转换为整数。你是如何进行插入的?

答案 2 :(得分:1)

如果用户在Excel中输入001,则会将其转换为数字1。

如果用户在Excel中输入'001,它将作为文本保存在单元格中。

如果使用数字格式“@”预格式化单元格,则当用户将001输入单元格时,它将作为文本“001”输入。 “@”数字格式告诉Excel该单元格是一个文本单元格,任何条目(无论是数字,日期,时间,分数等等)都应该按原样放置在单元格中 - 作为文本细胞

您能告诉您的用户使用“@”预先格式化此列吗?这通常是处理此问题的最可靠方式,因为用户无需记住输入'001。

答案 3 :(得分:0)

也许为Excel单元设置数据类型“Text”会有所帮助。

答案 4 :(得分:0)

Excel可能是这里的罪魁祸首。尝试将您的文件转换为CSV并查看其结果。如果新CSV文件中的前导零已消失,则表示Excel存在问题。

答案 5 :(得分:0)

Excel总能做到这一点,它的诞生。我知道有三种解决方法:

  1. 在Excel格式的任何单元格中输入数据之前,单元格为文本(如果需要,您可以执行整列操作。)这仅在您控制电子表格和用户时才有效,这基本上不会:-)。

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

  3. 假设您必须在代码中插入时修复数字。根据您加载数据的方式,可能会在T-SQL或其他代码中发生。在TSQL中,此表达式用零填充宽度为3个字符:右('000'+强制转换(2为varchar(3)),3)