FOR XMLのRAWモードのコード例の詳細説明

黄舟
リリース: 2017-03-22 17:03:13
オリジナル
2138 人が閲覧しました

説明:

raw モードは、クエリ結果セットの各行を を持つ XML 要素に変換します。 XML 階層を生成するには

デフォルトでは、null 以外の値はすべて < の属性にマッピングされます。 row> 要素。

クエリ結果セット内のデータを 要素の子要素に変換する必要がある場合は、

構文:
FOR XML RAW [ ('ElementName') ] [  [ , { XMLDATA | XMLSCHEMA [ ('TargetNameSpaceURI') ]} ] [ , ELEMENTS [ XSINIL | ABSENT ] ]  ::= [ , BINARY BASE64 ] [ , TYPE ] [ , ROOT [ ('RootName') ] ]
ログイン後にコピー

の例を参照してください。 :

テーブル Base を作成します。テーブルの構造は次のとおりです:

列名 id 本体 id
データ型 空を許可
int allows
nvarchar( 50) では、次のようにテーブルデータを挿入できます:

body

1 aaaa 2 bbbb 3 cccc 4 例: A. XML rawモードで使用する
ELEMENTSディレクティブを指定することで、結果セットを次の形式で表示します子要素です。

/* 结果:     */select * from base for xml raw;
ログイン後にコピー

この例文ではid 4のbodyが表示されていないことに気付きました。

その理由は、elementsディレクティブを使用する際、以下のコマンドを指定しないとデフォルトでAbscentが使用されるためです。このときnull値の要素は作成されません

以下の例では、要素ディレクティブとxsinilディレクティブを同時に指定することでxmlにnull値を表示することができます。 null を生成する時間 列の値の要素

/* 结果:  1 aaaa   2 bbbb   3 dddd   4  */select * from base for xml raw,elements;
ログイン後にコピー

データごとに、 要素として表示されるため、 要素の名前を変更する方法。別の名前。

C. 要素の名前を変更します

すべての XML ファイルにはルート要素があることはよく知られています。

D 生成された XML を指定します。 for for xml ルート要素

はrootを使って指定できます。ルートディレクティブのデフォルトのルート要素は
/* 结果:  1 aaaa   2 bbbb   3 dddd   4   */select * from base for xml raw,elements xsinil;
ログイン後にコピー

現時点では、生成されたxmlの結果は非常に良いようですが、データベースのbodyカラムを変更したいとなるカラム名、ルート要素名、要素名を指定した場合、どのようなデメリットが発生するのでしょうか?上記の結果では、各データを区別できないようで、ID は null 値 4 です。表示されません。次の文を参照してください。

/* 结果:  1 aaaa   2 bbbb   3 dddd   4   */select * from base for xml raw('baseinfo'),elements xsinil;
ログイン後にコピー
これまでのところ、見てきたようです。実際、前の文はさらに変更できます

/* 结果:   1 aaaa   2 bbbb   3 dddd   4    */select * from base for xml raw('baseinfo'),root('base'),elements xsinil;
ログイン後にコピー

結果が別の方法で表示されるように変更しましょう。

/* 结果:   1 aaaa   2 bbbb   3 dddd   4    */select id,body data from base for xml raw('baseinfo'),root('base'),elements xsinil;
ログイン後にコピー

必要に応じて組み合わせて、必要な結果を生成できます。

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

name nvarchar(50) 次のようにテーブル データを挿入します: 2
Allow
id 名前
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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!