Maison > Article > développement back-end > Explication détaillée des exemples de code pour le mode RAW de FOR XML
Description :
le mode brut convertit chaque ligne de l'ensemble de résultats de la requête en un élément XML avec le nom de l'élément 2bef0154f7bc75ad48fa20d0234d078f et convertit les colonnes de chaque ligne en attributs de ligne.
Une hiérarchie XML peut être générée en écrivant une requête FOR XML imbriquée
Par défaut, toutes les valeurs non nulles seront mappées en tant qu'attributs de l'élément 2bef0154f7bc75ad48fa20d0234d078f 🎜 >Si vous devez convertir les données de l'ensemble de résultats de la requête en éléments enfants de l'élément 2bef0154f7bc75ad48fa20d0234d078f, vous devez utiliser la directive elements
Syntaxe :
.
Pour plus de détails, voir l'exemple :FOR XML RAW [ ('ElementName') ] [ <CommonDirectives> [ , { XMLDATA | XMLSCHEMA [ ('TargetNameSpaceURI') ]} ] [ , ELEMENTS [ XSINIL | ABSENT ] ] <CommonDirectives> ::= [ , BINARY BASE64 ] [ , TYPE ] [ , ROOT [ ('RootName') ] ]Créez une table Base avec la structure suivante :
Insérez les données du tableau comme suit :A. Renvoyez les informations sur les données de la requête, utilisez le mode brut for XML
列名 数据类型 允许空 id int 允许 body nvarchar(50) 允许 Exemple :
id body 1 aaaa 2 bbbb 3 cccc 4
pour définir le résultat. apparaissent sous forme de sous-éléments en spécifiant la directive ELEMENTS./* 结果: <row id="1" body="aaaa" /> <row id="2" body="bbbb" /> <row id="3" body="dddd" /> <row id="4" /> */select * from base for xml raw;
Nous avons remarqué que le corps d'identifiant 4 n'est pas affiché dans cet exemple de phrase
/* 结果: <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;
La raison est que lors de l'utilisation de la commande elements, si la commande suivante n'est pas spécifiée, la valeur par défaut est Using abscent, aucun élément ne sera créé pour les valeurs nulles pour le moment Dans l'exemple de phrase suivant, les valeurs nulles peuvent être affichées en XML en utilisant les éléments xsinil B. Spécifiez la directive elements en même temps et les instructions xsinil pour produire des éléments avec des valeurs de colonne nulles Chaque élément de données est affiché avec un élément 2bef0154f7bc75ad48fa20d0234d078f, ce qui met les gens mal à l'aise. Comment modifier 2bef0154f7bc75ad48fa20d0234d078fLe nom de l'élément est un autre nom.C. l'élément 2bef0154f7bc75ad48fa20d0234d078f/* 结果: <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;
Nous savons tous que chaque fichier XML a un élément racine, comment ajouter son élément racine à ce texte XML/* 结果: <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;D. Pour spécifier l'élément racine du XML généré par for XML,
peut être spécifié à l'aide de la commande root. L'élément racine par défaut est 4216313e5055da45c6d0ded129c5d644 À l'heure actuelle, le résultat XML généré semble être très bon, mais si nous voulons changer la colonne body de la base de données en XML Comment modifier l'élément 1d029f6197b5a3eb8a3fdf0a088ddf55 le nom de l'élément/* 结果: <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;
Le résultat actuel est fondamentalement conforme au format de base d'un xml , alors, nous imaginons que si nous ne spécifions pas les noms de colonnes pour id et body, ni ne spécifions noms d'éléments racine, ni spécifier les noms d'éléments, quels inconvénients se produiront ?Depuis, il semble qu'il n'y ait pas de nom de colonne Les avantages qu'elle nous apporte. modifié un peu plusMais, pour ce qui précède. En conséquence, nous semblons incapables de distinguer chaque élément de données et la valeur nulle avec l'identifiant. 4 ne s'affiche pas. Comment le modifier ? Voir la phrase suivante
/* 结果: <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;
/* 结果: 1aaaa2bbbb3dddd4 */ --因为id为int类型,为使id不出现列名,我们使id+0 --因为body为nvarchar类型,为使body不出现列名,我们使body+''select id+0,body+'' from base for xml raw(''), elements;/* 结果: 1,aaaa;2,bbbb;3,dddd;4,null; */select id+0,',',isnull(body,'null')+'',';' from base for xml raw(''),elements;Modifions-le encore pour que le résultat apparaisse d'une autre manière
Vous pouvez maintenant voir que nous pouvons combiner selon nos besoins pour générer les résultats dont nous avons besoinDans SQLServer2005, les données XML sont déjà prises en charge, vous pouvez donc écrire l'instruction TYPE pour renvoyer le type. résultats de la requête FOR XML dans le type de données xml :/* 结果: 1,aaaa;2,bbbb;3,dddd;4,null; */select convert(nvarchar,id)+','+isnull(body,'null')+';' from base for xml raw(''),elements;
/* 结果: {1,aaaa}{2,bbbb}{3,dddd}{4,null} */select '{'+convert(nvarchar,id)+','+isnull(body,'null')+'}' from base for xml raw(''),elements;Enfin, un exemple courant est utilisé pour introduire l'application brute du modèle
.Créez la table student student, la structure de la table est la suivante :
Insérez les données de la table comme suit :declare @string nvarchar(1000)declare @xml xml/* 消息257,级别16,状态3,第8行 不允许从数据类型xml到nvarchar的隐式转换。请使用CONVERT函数来运行此查询。 */ --set @string=(select id,body from base for xml raw,type)set @xml=(select id,body from base for xml raw,type)
建课程表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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!