如题,对常规表进行查询并生成XML,生成的XML中记录数据的字符过长,下面举个例子select [float],[int],[real],[decimal] from (
select cast (6.28 as float) as [float],
cast(6.00 as int) as [int],
cast(6.18 as real) as [real],
cast(6.12 as decimal(16,2)) as [decimal]
) a for xml  path('R')--生成的XML是:
'<R>
  <float>6.280000000000000e+000</float>
  <int>6</int>
  <real>6.1799998e+000</real>
  <decimal>6.12</decimal>
</R>'其中生成的XML数据中6.280000000000000e+0006.1799998e+000字符太长
,实际需要生成的格式是
'<R>
  <float>6.28</float>
  <int>6</int>
  <real>6.18</real>
  <decimal>6.12</decimal>
</R>'

除了预先把数据转换为decimal,还有没有别的方法得到需要的结果

解决方案 »

  1.   

    先转换成dec是比较好的办法了
      

  2.   

    select [float],[int],[real],[decimal] from (
    select 6.28 as [float],
    6 as [int],
    6.18 as [real],
    6.12 as [decimal]
    ) a for xml  path('R')
      

  3.   

    用float類型會有這樣的情況,沒發現其它辦法
      

  4.   

    别将它转换成float,除非有很大的指数.
      

  5.   


    select [float],[int],[real],[decimal] from (
    select cast (6.28 as float(24)) as [float],
    cast(6.00 as int) as [int],
    cast(6.18 as real) as [real],
    cast(6.12 as decimal(16,2)) as [decimal]
    ) a for xml  path('R')
    谈谈为啥不能预先转,为啥太长了就不行
      

  6.   

    我的意思是原表就是包含FLOAT类型的数据,表结构是无法改的,上面只是举个例子,如果在生成XML进行转换小数据量速度就没有什么影响,但大数据量就很难说了,所以想问问在FOR XML的语法里有没有办法
      

  7.   

    生成xml格式本来就慢,转不转都一样
      

  8.   

    另外转换为Decimal前还要先判断是否为NULL,这样就更慢了
      

  9.   

    这个主要是想生成的XML不要那么大,因为FLOAT的列越多,XML就越大了,这个空间也要剩的