实验10 SQL Server 与XML
1.目的与要求
(1)掌握SQL Server中使用XML类型列或变量的方法; (2)掌握XQuery的基本方法; (3)掌握FOR XML子句的用法。 2.实验准备
(1)了解XML的基本语法; (2)了解XML数据类型; (3)了解插入XML数据的方法; (4)了解XQuery查询的基本方法; (5)了解FOR XML子句的用法。 3.实验内容
(1)编写一段XML代码,并保存为Employ.xml文件,文件中存储员工的信息。 新建一个文本文档,在其中输入以下语句。
<员工信息> <员工>
<姓名 编号=\"000001\">王林姓名> <学历>大专学历>
<出生日期>1966-01-23出生日期> 员工> <员工>
<姓名 编号=\"010008\">伍容华姓名> <学历>本科姓名> <学历>本科学历>
<出生日期>1976-03-28出生日期> 员工> 员工信息>
保存文件,文件名为Employ,xml。
【思考与练习】 编写一段有关学生信息的XML代码。
(2)使用xml数据类型定义一个表tableA,并向表中插入一行数据。 创建使用如下语句
use YGGL GO
create table tableA (
num int not null primary key, info xml not null, )
【思考与练习】 使用行集函数OPENROWSET将Employ。Xml文件中的xml数据插入到表tableA中。
(3)使用xml数据类型方法查询xml实例中的xml数据,并掌握XQuery语言的基本用法。
①声明一个xml变量并将有关员工信息的xml数据分配给它,再使用query()方法对文档指定XQUERY来查询<姓名>子元素。
eclare @xmldoc xml set @xmldoc='<公司> <员工信息> <员工>
<姓名 编号=\"000001\">王林姓名> <性别>男性别> <年龄>43年龄> 员工> <员工>
<姓名 编号=\"000002\">陈燕姓名> <性别>女性别> <年龄>25年龄> 员工> 员工信息>
公司>'
select @xmldoc.query('/公司/员工信息/员工/姓名') AS 员工姓名
2.使用value()方法从XML数据中查询出元素的第一个“编号”值,并赋给char类型的变量;
declare @xmldoc xml declare @number char(6) set @xmldoc='<公司> <员工信息> <员工>
<姓名 编号=\"000001\">王林姓名> <性别>男性别> <年龄>43年龄> 员工> <员工>
<姓名 编号=\"000002\">陈燕姓名> <性别>女性别> <年龄>25年龄> 员工> 员工信息> 公司>'
select @number=@xmldoc.value('(/公司/员工信息/员工/姓名/@编号)[1]','char(6)')
select @number as 员工编号
3.使用XML DML 语句在一段员工信息数据中一个节点的后面添加一个节点;
declare @xmldoc xml set @xmldoc='<员工信息>
<姓名 编号=\"000001\">王林姓名> <性别>男性别> <年龄>46年龄> 员工信息>'
select @xmldoc as 插入节点前数据
set @xmldoc.modify('insert<出生日期>1991-02-10出生日期> after(/员工信息/性别)[1]')
select @xmldoc 插入节点后数据
1.查询YGGL数据库的Employees表中工作时间大于3年的员工信息,并将结果使用for xml raw模式返回为元素,元素的属性名和值为表中各列的列名和列植;use yggl go select * from employees where workyear>3 for xml raw
2.使用for xml path模式查找学历为硕士的员工信息,使用<硕士人员>作为父级元素名,“联系电话”作为<硕士员工>的属性。<硕士员工>元素下是<员工信息>元素,<编号>、<姓名>和<工作时间>作为<员工信息>的子元素;
select phonenumber as '@联系电话', employeeid as '员工信息/编号', name as '员工信息/姓名', workyear as '员工信息/工作时间' from employees where education='硕士' for xml path('硕士员工') 运行结果如下:
<硕士员工 联系电话=\"83792361 \"> <员工信息>
<编号>020010编号> <姓名>王向容 姓名> <工作时间>2工作时间> 员工信息> 硕士员工>
<硕士员工 联系电话=\"84708817 \"> <员工信息>
<编号>102208编号> <姓名>朱俊 姓名> <工作时间>2工作时间> 员工信息> 硕士员工>
<硕士员工 联系电话=\"83346722 \"> <员工信息>
<编号>1091编号> <姓名>钟敏 姓名> <工作时间>4工作时间> 员工信息> 硕士员工> 【思考与练习】
A. 使用FOR XML PATH模式查询实际收入大雨2000元的员工信息,使用员工的
实际收入作为<员工信息>元素的属性。
B. 比较FOR XML PATH模式和FOR XML EXPLICIT模式的不同之处。