Sql server "的输出;对于XML Explicit";查询根据连接更改货币列的尾随零

Sql server "的输出;对于XML Explicit";查询根据连接更改货币列的尾随零,sql-server,for-xml,for-xml-explicit,Sql Server,For Xml,For Xml Explicit,我有一个Microsoft SQL Server查询,它构建一个临时表,然后使用“for XML Explicit”语法输出XML,如下所示: select * from @XMLOutput order by [UaarSale!1!NodeOrder!hide], [UaarSale!1!NestingId!hide], Tag for XML Explicit 这些都包含在存储过程中。我们只需运行传入Id的存储过程即可将XML文档取出 查询本身工作得很好,并且已经运行了好几年。

我有一个Microsoft SQL Server查询,它构建一个临时表,然后使用“for XML Explicit”语法输出XML,如下所示:

select * from @XMLOutput order by 
  [UaarSale!1!NodeOrder!hide], [UaarSale!1!NestingId!hide], Tag  
for XML Explicit
这些都包含在存储过程中。我们只需运行传入Id的存储过程即可将XML文档取出

查询本身工作得很好,并且已经运行了好几年。但是,我们现在发现,XML输出根据调用存储过程的人而变化。我们的输出包含大量的货币数据类型。在某些情况下,货币类型中不包括尾随的零。在其他情况下,类型始终显示4个有效数字

在我的测试环境中,我在SQLServer2008R2数据库上复制了这一点

例如,我的主程序(与旧的SQLOLEDB提供程序连接)获取不包含尾随零的XML

<node value="12.34" />

但是,当我从SQLServerManagementStudio运行相同的存储过程时,我总是得到4个位置

<node value="12.3400" />

我还有一个客户端使用同一个SQLOLEDB提供程序与我的应用程序连接,该提供程序将获得额外的零

我处理XML文件以生成报告。这些不需要额外的零。因为我看到两个不同的程序之间有不同的输出,所以我猜测(希望)有一个数据库选项、连接字符串选项或额外的命令参数,用于控制如何将货币类型转换为XML输出的字符串


是否存在这种情况?如果存在,如何设置值以保持输出一致?最好没有额外的零。

我要做的是使用
CONVERT(VARCHAR,xxx)
来解决这个问题

下面是一个在SQL Server 2008 R2中测试的示例:

DECLARE @foo MONEY
SELECT @foo = 15.95

SELECT @foo AS 'foo' FOR XML PATH('')
SELECT CONVERT(varchar, @foo) AS 'fee' FOR XML PATH('')

和你一样,我想知道这样一个选项是否存在。同时,我用上面的方法来解决这个问题。