“for XML Explicit”查询的输出根据连接更改money列的尾随零

时间:2013-02-14 00:41:23

标签: 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文档。

查询本身效果很好,已经有好几年了。但是,我们现在发现XML输出正在发生变化的情况取决于谁调用存储过程。我们的输出包含大量货币数据类型。在某些情况下,货币类型中不包括尾随零。在其他情况下,类型始终显示4位有效数字。

在我的测试环境中,我在SQL Server 2008 R2数据库上复制了这个。

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

<node value="12.34" />

但是当我从SQL Server Management studio运行相同的存储过程时,我总是得到4个位置。

<node value="12.3400" />

我还有一个客户端使用相同的SQLOLEDB提供程序连接我的应用程序,后者正在获得额外的零。

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

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

1 个答案:

答案 0 :(得分:1)

我所做的就是使用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('')