【发布时间】:2013-03-26 05:41:09
【问题描述】:
我有一个数据表,其中的值包含超过 12 个小数位(例如 451234.123456789012),我从 Excel 工作表中获取。我正在使用用户定义的表将数据表中的值插入到 SQL 表中。
在我的存储过程中,我有一个类似的语句,
insert into tblMytable(fld1, fld2..)
Select fld1, fld2,.. from @MyUDT
问题:
-
假设所有 Excel 单元格类型都是“常规”,我将在数据表中获得完整的精度,但是当我将其插入 SQL 表时,我会丢失除 2 个精度之外的所有精度。
假设所有 Excel 单元格类型都是“文本”,我得到的整个值只有 12 位数字,包括非小数。小数部分。例如对于
451234.123456789012,我在我的C# 数据表中得到451234.12345。插入到 SQL 表后,我得到的结果也是一样的。
在我的 UDT 中,字段定义为 varchar(20),我检查了 varchar(45) 但没有用。
【问题讨论】:
-
您的数据表是否将它们转换为具有 18 个字符精度的十进制?还是数据表都是字符串?
-
@Ted,我正在使用 oledbDataAdaptor 将 Excel 填充到数据表中,我没有进行任何转换。
-
数据库中的这些列是什么数据类型?另外:您说的是 SQL(结构化查询语言)-但您的真正意思是 SQL Server-Microsoft RDBMS-对吗??
-
DataTable中的数据类型是什么?你是如何从 Excel 中读取数据的? 从 Excel 获取数据时的数据是什么?就个人而言,我怀疑这里的问题出在 reader 端,过于热情地将其视为小数/双精度。 -
1.假设所有上传的 Excel 单元格类型都是“常规”,我在 C# 数据表中获得了完整的精度。然后我将使用 UDT 将此 C# 数据表插入到 SQL Server 2008 表中,那时我只得到 2 个精度。但是所有的 excel 单元格类型都是 c# 数据表本身中的文本,我只得到 12 位数字,包括十进制和非十进制数字。我可以以编程方式更改上传的单元格类型。