説明:
raw モードは、クエリ結果セットの各行を 2bef0154f7bc75ad48fa20d0234d078f を持つ XML 要素に変換します。 XML 階層を生成するには
デフォルトでは、null 以外の値はすべて 3534b5676c7b819d1d4d2910ff85d365 要素。
クエリ結果セット内のデータを 2bef0154f7bc75ad48fa20d0234d078f 要素の子要素に変換する必要がある場合は、
構文:
FOR XML RAW [ ('ElementName') ] [ <CommonDirectives> [ , { XMLDATA | XMLSCHEMA [ ('TargetNameSpaceURI') ]} ] [ , ELEMENTS [ XSINIL | ABSENT ] ] <CommonDirectives> ::= [ , BINARY BASE64 ] [ , TYPE ] [ , ROOT [ ('RootName') ] ]
の例を参照してください。 :
テーブル Base を作成します。テーブルの構造は次のとおりです:ELEMENTSディレクティブを指定することで、結果セットを次の形式で表示します子要素です。列名
id データ型 空を許可 本体 int allows id nvarchar( 50) では、次のようにテーブルデータを挿入できます: body
1 aaaa 2 bbbb 3 cccc 4 A. XML rawモードで使用する 例:
/* 结果: <row id="1" body="aaaa" /> <row id="2" body="bbbb" /> <row id="3" body="dddd" /> <row id="4" /> */select * from base for xml raw;
その理由は、elementsディレクティブを使用する際、以下のコマンドを指定しないとデフォルトでAbscentが使用されるためです。このときnull値の要素は作成されませんこの例文ではid 4のbodyが表示されていないことに気付きました。
以下の例では、要素ディレクティブとxsinilディレクティブを同時に指定することでxmlにnull値を表示することができます。 null を生成する時間 列の値の要素
/* 结果: <row> <id>1</id> <body>aaaa</body> </row> <row> <id>2</id> <body>bbbb</body> </row> <row> <id>3</id> <body>dddd</body> </row> <row> <id>4</id> </row> */select * from base for xml raw,elements;
データごとに、2bef0154f7bc75ad48fa20d0234d078f 要素として表示されるため、2bef0154f7bc75ad48fa20d0234d078f 要素の名前を変更する方法。別の名前。
C. 1b6fb8b207296fd2074891ee12695f3d
これまでのところ、見てきたようです。実際、前の文はさらに変更できます/* 结果: <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>1</id> <body>aaaa</body> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>2</id> <body>bbbb</body> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>3</id> <body>dddd</body> </row> <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>4</id> <body xsi:nil="true" /> </row> */select * from base for xml raw,elements xsinil;現時点では、生成されたxmlの結果は非常に良いようですが、データベースのbodyカラムを変更したい 1d029f6197b5a3eb8a3fdf0a088ddf55となるカラム名、ルート要素名、要素名を指定した場合、どのようなデメリットが発生するのでしょうか?上記の結果では、各データを区別できないようで、ID は null 値 4 です。表示されません。次の文を参照してください。
/* 结果: <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>1</id> <body>aaaa</body> </baseinfo> <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>2</id> <body>bbbb</body> </baseinfo> <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>3</id> <body>dddd</body> </baseinfo> <baseinfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <id>4</id> <body xsi:nil="true" /> </baseinfo> */select * from base for xml raw('baseinfo'),elements xsinil;/* 结果: <base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <baseinfo> <id>1</id> <body>aaaa</body> </baseinfo> <baseinfo> <id>2</id> <body>bbbb</body> </baseinfo> <baseinfo> <id>3</id> <body>dddd</body> </baseinfo> <baseinfo> <id>4</id> <body xsi:nil="true" /> </baseinfo> </base> */select * from base for xml raw('baseinfo'),root('base'),elements xsinil;結果が別の方法で表示されるように変更しましょう。
/* 结果: <base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <baseinfo> <id>1</id> <data>aaaa</data> </baseinfo> <baseinfo> <id>2</id> <data>bbbb</data> </baseinfo> <baseinfo> <id>3</id> <data>dddd</data> </baseinfo> <baseinfo> <id>4</id> <data xsi:nil="true" /> </baseinfo> </base> */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 を許可しますsidintallows
namenvarchar(50)
李思Allow 次のようにテーブル データを挿入します: id 名前 2 1 張三 3
王呉 建课程表sclass,表结构如下:
列名 数据类型 允许空 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 サイトの他の関連記事を参照してください。