説明:
raw モードは、クエリ結果セットの各行を
を持つ XML 要素に変換します。 XML 階層を生成するには
デフォルトでは、null 以外の値はすべて < の属性にマッピングされます。 row> 要素。
クエリ結果セット内のデータを
構文:要素の子要素に変換する必要がある場合は、
FOR XML RAW [ ('ElementName') ] [[ , { XMLDATA | XMLSCHEMA [ ('TargetNameSpaceURI') ]} ] [ , ELEMENTS [ XSINIL | ABSENT ] ] ::= [ , BINARY BASE64 ] [ , TYPE ] [ , ROOT [ ('RootName') ] ]
の例を参照してください。 :
テーブル Base を作成します。テーブルの構造は次のとおりです:ELEMENTSディレクティブを指定することで、結果セットを次の形式で表示します子要素です。列名
id データ型 空を許可 本体 int allows id nvarchar( 50) では、次のようにテーブルデータを挿入できます: body
1 aaaa 2 bbbb 3 cccc 4 A. XML rawモードで使用する 例:
/* 结果:|
|
|
*/select * from base for xml raw;
その理由は、elementsディレクティブを使用する際、以下のコマンドを指定しないとデフォルトでAbscentが使用されるためです。このときnull値の要素は作成されませんこの例文ではid 4のbodyが表示されていないことに気付きました。
以下の例では、要素ディレクティブとxsinilディレクティブを同時に指定することでxmlにnull値を表示することができます。 null を生成する時間 列の値の要素
/* 结果:|
1 aaaa|
2 bbbb|
3 dddd*/select * from base for xml raw,elements;
4 ログイン後にコピー
はrootを使って指定できます。ルートディレクティブのデフォルトのルート要素はデータごとに、
要素として表示されるため、
要素の名前を変更する方法。別の名前。
C.
要素の名前を変更します
すべての XML ファイルにはルート要素があることはよく知られています。
D 生成された XML を指定します。 for for xml ルート要素
これまでのところ、見てきたようです。実際、前の文はさらに変更できます/* 结果:|
1 aaaa|
2 bbbb|
3 dddd*/select * from base for xml raw,elements xsinil;
4 ログイン後にコピー現時点では、生成されたxmlの結果は非常に良いようですが、データベースのbodyカラムを変更したいとなるカラム名、ルート要素名、要素名を指定した場合、どのようなデメリットが発生するのでしょうか?上記の結果では、各データを区別できないようで、ID は null 値 4 です。表示されません。次の文を参照してください。
/* 结果:1 aaaa2 bbbb3 dddd*/select * from base for xml raw('baseinfo'),elements xsinil; 4 ログイン後にコピー
/* 结果:1 aaaa2 bbbb3 dddd*/select * from base for xml raw('baseinfo'),root('base'),elements xsinil; 4 ログイン後にコピー結果が別の方法で表示されるように変更しましょう。
/* 结果:1 aaaa2 bbbb3 dddd*/select id,body data from base for xml raw('baseinfo'),root('base'),elements xsinil; 4 ログイン後にコピー
必要に応じて組み合わせて、必要な結果を生成できます。
SQLServer2005 では、XML データ型がすでにサポートされているため、XML データ型で FOR XML クエリの結果を返す TYPE 命令を記述することができます。例は次のとおりです:
/* 结果: 1aaaa2bbbb3dddd4 */ --因为id为int类型,为使id不出现列名,我们使id+0 --因为body为nvarchar类型,为使body不出现列名,我们使body+''select id+0,body+'' from base for xml raw(''), elements;ログイン後にコピー
最後に、一般的な例を使用して、for XML raw モードのアプリケーションを紹介します。Student テーブル Student を作成します。テーブル構造は次のとおりです:
列名。
データ型 null を許可します
sid int
allows
namenvarchar(50)
李思Allow 次のようにテーブル データを挿入します: id 名前 2 1 張三 建课程表sclass,表结构如下:
3
王呉
列名 数据类型 允许空 cid int 允许 name nvarchar(50) 允许 插入表数据如下:
id name 1 语文 2 数学 3 英语
建student_class表,表结构如下:
列名 数据类型 允许空 sid int cid int 插入数据如下:
cid sid 1 1 1 2 1 3 2 1 3 2 3 3
至此,数据结果是:
姓名 课程 张三 语文 张三 数学 张三 英语 李四 语文 王五 数学 王五 英语
我们需要最后的结果形式如下:
姓名 课程 张三 语文,数学,英语 李四 语文 王五 数学,英语
该如何实现呢?
/* 结果: 张三 语文,数学,英语 李四 语文 王五 数学,英语 */select [name], stuff( ( select ','+[name] from sclass where cid in ( select cid from student_class where student.sid=student_class.sid ) for xml raw(''),elements ), 1,1,'') sclassfrom studentログイン後にコピー以上がFOR XMLのRAWモードのコード例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。