2

一時テーブルを作成し、次のような「for XML Explicit」構文を使用して XML を出力する Microsoft SQL Server クエリがあります。

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 ファイルを処理してレポートを生成します。それらは余分なゼロを期待していません。2 つの異なるプログラム間で異なる出力が表示されるので、データベース オプション、接続文字列オプション、またはマネー タイプを XML 出力用の文字列に変換する方法を制御する追加のコマンド パラメータがあると推測しています (期待しています)。

そのようなものは存在しますか?もしそうなら、出力の一貫性を保つために値を設定するにはどうすればよいですか? 余分なゼロがないことが望ましいです。

4

1 に答える 1

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('')
于 2013-03-26T23:21:46.090 に答える