FOR XML EXPLICIT和Precision

时间:2011-08-01 14:48:17

标签: xml sql-server-2008

说我想在FOR XML EXPLICIT查询中使用以下数据:

ItemId:  14528097
ProductId:  7575
Revenue:  12.95
PerItemPrice:  12.95
Quantity: 1

现在,当我编写查询时,我得到以下输出:

    <ItemId>14528097</ItemId>
    <ProductId>7575</ProductId>
    <Revenue>12.9500</Revenue>
    <PerItemPrice>1.295000000000000e+001</PerItemPrice>
    <Quantity>1.000000000000000e+000</Quantity>

有没有办法让它看起来像这样:

    <ItemId>14528097</ItemId>
    <ProductId>7575</ProductId>
    <Revenue>12.9500</Revenue>
    <PerItemPrice>12.95</PerItemPrice>
    <Quantity>1</Quantity>

或者我运气不好?

3 个答案:

答案 0 :(得分:2)

似乎a1ex07打败了我的答案,但我怀疑您使用FLOATREAL(有意或无意),我建议始终使用DECIMAL数字值不明确需要FLOAT / REAL的属性。

答案 1 :(得分:0)

此查询工作正常,因此请确保您的类型已正确投放:

declare @t table (
    ItemId varchar(10),
    ProductId varchar(5),
    Revenue decimal(9,2),
    PerItemPrice decimal(9,2),
    Quantity int)

insert into @t select '14528097','7575',12.95,12.95,1

select 1 as 'Tag', NULL as 'Parent', 
    NULL as 'Items!1!',
    NULL as 'Item!2!Item',
    NULL as 'Item!2!Revenue'
union
select 2, 1, NULL, ItemId, Revenue
from @t for xml explicit

答案 2 :(得分:0)

对比使用浮点列与十进制列的结果。

...浮法

create table #testfloat (a float)
insert into #testfloat values (1)
select * from #testfloat for xml auto
drop table #testfloat

<a="1.000000000000000e+000"/>

现在有了十进制类型......

create table #testdec (a decimal(5,2))
insert into #testdec values (1)
select * from #testdec for xml auto
drop table #testdec

<a="1.00"/>