1

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

4

6 回答 6

2

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

于 2009-07-17T03:49:27.137 回答
1

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

于 2009-07-17T03:22:30.097 回答
1

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

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

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

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

于 2009-07-17T13:44:02.083 回答
0

Excel 可能是这里的罪魁祸首。尝试将您的文件转换为 CSV,看看结果如何。如果新 CSV 文件中的前导零消失了,则 Excel 就是问题所在。

于 2009-07-17T19:02:43.193 回答
0

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

于 2009-07-17T03:44:39.937 回答
0

Excel 总是这样做,这很麻烦。我知道三种解决方法:

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

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

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

于 2009-07-22T17:07:47.153 回答