質問

私のSQLはとても簡単です

従業員ID]としてidを選択し、empname as [Employee name]、sal as [salary] for xml auto、elements、root( 'customer')

このSQLを実行すると、XML形式で出力が取得されます。 XML出力はです

<customers>
<Emp>
  <Employee_x0020_ID>1</Employee_x0020_ID>
  <Employee_x0020_Name>Tridip</Employee_x0020_Name>
  <Salary>2500</Salary>
</Emp>
<Emp>
  <Employee_x0020_ID>2</Employee_x0020_ID>
  <Employee_x0020_Name>Ari</Employee_x0020_Name>
  <Salary>4000</Salary>
</Emp>
<Emp>
  <Employee_x0020_ID>3</Employee_x0020_ID>
  <Employee_x0020_Name>Dibyendu</Employee_x0020_Name>
  <Salary>3500</Salary>
</Emp>
</customers>

XMLが提出した名前を表示した場合、スペースのためにフィールド名が動的に生成されることを理解できます。u003CEmployee_x0020_ID> 1u003C/Employee_x0020_ID>これは動的に生成されますが、次のように生成する必要がありますu003CEmployee ID>1u003C/Employee ID> 。 XMLに提出された名前でスペースを維持する必要があります。何をすべきか教えてください........ありがとう

役に立ちましたか?

解決

XMLのふりを探している出力は次のとおりです。パーサーでXMLにキャストすることさえできません(少なくともそうすべきではありません - SQL Serverではそうではありません)。

;with emp(ID, EmpName, Sal) as (select
    1, 'tridip', 2500 union all select
    2, 'ari', 4000)

select replace(convert(varchar(max),(
    select ID as [Employee ID], EmpName as [Employee Name], Sal as [Salary] 
    from Emp 
    FOR XML AUTO, ELEMENTS, ROOT('customers'))),
    '_x0020_', ' ')

出力(Clarity -Clarity -SQL Serverが1つの行ですべてを返すために再フォーマット)

<customers><Emp><Employee ID>1</Employee ID><Employee Name>tridip
</Employee Name><Salary>2500</Salary></Emp><Emp>
<Employee ID>2</Employee ID><Employee Name>ari</Employee Name>
<Salary>4000</Salary></Emp></customers>

他のヒント

から XML要素 w3schoolsで:

XML要素は、次の命名ルールに従う必要があります。

  • 名前には文字、数字、その他の文字が含まれている可能性があります
  • 名前は数字や句読点から始めることはできません
  • 名前は文字XML(またはXML、またはXMLなど)から始めることはできません
  • 名前はスペースを含めることはできません

任意の名前を使用することができ、単語は予約されていません。

(強調が追加されました)

これは同じ質問だと思いますか?SQL Server 2005のスペースの問題を伴うXMLオートおよび列名の場合

答えは同じです。 XMLタグ名にスペースを持つことはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top