次の方法で共有


文字列データ型の FOR XML のサポート

SQL Server 2000 では、データ内の空白文字はそのまま返されていました。SQL Server 2005 以降では、FOR XML で XML が生成されるときに、データ内の空白文字はエンティティに変換されます。

次の例では、サンプル テーブル T を作成し、ライン フィード、キャリッジ リターン、およびタブ文字が含まれたサンプル データを挿入します。SELECT ステートメントは、このテーブルからサンプル データを取得します。

CREATE TABLE T
(
  c1 int identity primary key,
  c2 varchar(100)
)
go
 
insert T (c2) values ('Special character 0xD for carriage return ' + convert(varchar(10), 0xD) + ' after carriage return')
insert T (c2) values ('Special character 0x9 for tab ' + convert(varchar(10), 0x9) + ' after tab' )
insert T (c2) values ('Special character 0xA for line feed ' + convert(varchar(10), 0xA) + ' after line feed')
go
SELECT * 
FROM T
FOR XML AUTO
go

次に結果を示します。

  <T c1="1" c2="Special character 0xD for carriage return &#xD; after carriage return" />
  <T c1="2" c2="Special character 0x9 for tab &#x09; after tab" />
  <T c1="3" c2="Special character 0xA for line feed &#xA; after line feed" />

上のクエリに関して、次の点に注意してください。

  • 1 行目のキャリッジ リターンは、&#xD というエンティティに変換されます。

  • 2 行目のタブ文字は、&#x09 というエンティティに変換されます。

  • 3 行目のライン フィード文字は、&#xA というエンティティに変換されます。

SQL Server 2000 では、空白文字がエンティティに変換されないので、次の結果が返されます。

<T c1="1" c2="Special character 0xD for carriage return  after carriage return"/>
<T c1="2" c2="Special character 0x9 for tab     after tab"/>
<T c1="3" c2="Special character 0xA for line feed 
 after line feed"/>