2009-07-17 60 views
1

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

+2

你用什么方法获取你的Excel数据到SQL Server中? SSIS? DTS?批量加载?通过ASP脚本? SQL Server的什么版本的Excel?您在问题中显示的Excel数字的最大“文本”值是多少?是否有可能有一个前面为零的10个字符的数字?如果你想在前面加一个零,你想要填充多少个字符?对不起,问这么多问题,只是想让你更接近解决方案... – Taptronic 2009-07-17 04:04:50

回答

1

东西必须将excel单元格中的数据从字符串转换为整数。您执行插入?

+0

我从来没有把它转换成整数! – 2009-07-17 03:34:03

+0

也许你并没有意识到它。 – 2009-07-17 13:48:04

0

可能建立一个Excel单元格将有助于数据类型“文本”。

+1

不能!如果将excel单元格中的数据类型更改为“text”,则前面的零将在excel文件中删除。 – 2009-07-17 03:49:52

2

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

1

如果用户输入001到Excel,它会被转换为数字1

如果用户输入“001到Excel,它将被保存在单元为文本。

如果细胞是预格式化的数字格式“@”,然后当用户输入001进入细胞,将被输入作为文本“001”。 “@”数字格式告诉Excel单元格是一个文本单元格,任何条目(不管它看起来像一个数字,日期,时间,分数等等)应该简单地放置在单元格中 - 作为文本细胞。

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

0

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

0

Excel中始终做到这一点,它的一个nuissance。有三种解决方法,我知道的:

  1. 在Excel中的任何单元格中输入的数据格式的单元格作为文本之前,如果你控制了电子表格和用户(您可以根据需要做一整列)。这只能,这基本上从来没有:-)。

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

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