我有一个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输出的字符串。
是否存在这样的事情,如果存在,如何设置值以保持输出一致?最好没有额外的零。
答案 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('')