2

SQL Server 2008 を使用しています。

単一の列と単一の行を持つテーブル変数があります。

私がこれを行う場合:

Declare @testsToRun Table ( testsId BigInt )
Insert Into @testsToRun
Select testsId From tests Where testsId = 10

Select Top 1 * From @testsToRun
For Xml Auto , Type , Root('testMessage') 

次のような XML を取得します。

<testMessage> 
    <_x0040_testsToRun testsId="10" />
</testMessage>

私が実際に欲しいのは:

<testMessage>
    <testsToRun testsId="10" />
</testMessage>

行ソースがテーブルの場合、問題なく動作するようです。それがテーブル変数の場合、子要素のラベルを取得したくtestsToRunありません_x0040_testsToRun

FOR XML ステートメント/句を修正して適切な出力を得るにはどうすればよいですか?

ありがとう。

4

3 に答える 3

4

代わりにこれを試してください-使用FOR XML PATHする列エイリアスで出力構造を使用および定義します。

SELECT TOP 1
    testsId AS '@testsId'
FROM 
    @testsToRun
FOR XML PATH('testsToRun'), ROOT('testMessage') 

私に与えます:

<testMessage>
  <testsToRun testsId="10" />
</testMessage>
于 2010-07-27T21:03:35.067 に答える
1

一時テーブルでエイリアスを使用してみてください。

Declare @testsToRun Table ( testsId BigInt )
Insert Into @testsToRun
Select testsId From tests Where testsId = 10

Select Top 1 * From @testsToRun testsToRun
For Xml Auto , Type , Root('testMessage') 
于 2010-07-27T20:48:31.650 に答える
0

x0040値は、一時テーブルの内部名です通常のテーブルから選択すると、通常の出力が得られます(そのため....オプションは、一時テーブルを作成し、必要なものを選択してデータベースからドロップすることです)。

于 2010-07-27T20:48:36.783 に答える