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
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
Syntaxe :🎜 >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
, vous devez utiliser la directive elements
.
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') ] ]
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;Copier après la connexion
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;Copier après la connexion
<🎜. >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émentC. l'élément, ce qui met les gens mal à l'aise. Comment modifier
Le nom de l'élément est un autre nom.
/* 结果: <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;Copier après la connexion
Nous savons tous que chaque fichier XML a un élément racine, comment ajouter son élément racine à ce texte XML<🎜. >D. Pour spécifier l'élément racine du XML généré par for 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;Copier après la connexion
peut être spécifié à l'aide de la commande root. L'élément racine par défaut est<🎜. >
À 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 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;Copier après la connexion
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;Copier après la connexion
<🎜. >/* 结果: 1aaaa2bbbb3dddd4 */ --因为id为int类型,为使id不出现列名,我们使id+0 --因为body为nvarchar类型,为使body不出现列名,我们使body+''select id+0,body+'' from base for xml raw(''), elements;Copier après la connexionModifions-le encore pour que le résultat apparaisse d'une autre manière/* 结果: 1,aaaa;2,bbbb;3,dddd;4,null; */select id+0,',',isnull(body,'null')+'',';' from base for xml raw(''),elements;Copier après la connexion
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;Copier après la connexion
Enfin, un exemple courant est utilisé pour introduire l'application brute du modèle/* 结果: {1,aaaa}{2,bbbb}{3,dddd}{4,null} */select '{'+convert(nvarchar,id)+','+isnull(body,'null')+'}' from base for xml raw(''),elements;Copier après la connexion
.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)Copier après la connexion
建课程表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 studentCopier après la connexionCe 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!