我有一个数据表,其值包含超过12个小数位(例如451234.123456789012
),我从Excel工作表中获取。我正在使用用户定义的表将值从dattable插入到SQL表中。
在我的存储过程中,我有一个声明,如
insert into tblMytable(fld1, fld2..)
Select fld1, fld2,.. from @MyUDT
的问题:
假设所有Excel单元格类型都是'General'我在数据表中获得了完整的精度,但是当我将它插入到SQL表中时,除了2个精度之外我都失去了所有。
假设所有Excel单元格类型都是“文本”我的整个值只有12位数,包括非小数。小数部分。例如对于451234.123456789012
,我在C#datatable中获得451234.12345
。插入SQL表后我也一样。
在我的UDT中,字段定义为varchar(20)
,我使用varchar(45)
进行了检查,但没有用。
答案 0 :(得分:1)
我已经使用
处理了这个问题由于我在读取excel类型作为C#datatable的一般性时获得了完全的精度,我通过将列类型单独更改为字符串来创建数据表克隆,因此我将获得所有字符串类型的值与完全精度一样,然后我将数据表传递给SQL 2008表而不会丢失精度,现在它工作正常。
代码:
dt= ds.Tables[0].Clone();
for (ICol = 0; ICol < ds.Tables[0].Columns.Count; ICol++)
dt.Columns[ICol].DataType = typeof(string);
foreach (DataRow row in ds.Tables[0].Rows)
{
dt.ImportRow(row);
}