--
--10.5.1节示例
--
--使用query()查询XML变量
DECLARE @stuXML XML
SET @stuXML='<Student>
<Name>何欢</Name>
<Sex>1</Sex>
<Birthday>1982-08-06</Birthday>
</Student>'
SELECT @stuXML.query('/Student/Name') --查询XML
--使用query()查询XML列
SELECT StuInfo.query('/Student/Birthday') AS Birthday –XML查询
FROM XMLStudent2
--
--10.5.2节示例
--
--在XML变量中使用exists()方法
declare @x XML
declare @f bit
set @x = '<root Somedate = "2008-01-01"/>'
set @f = @x.exist('/root[(@Somedate cast as xs:date?) eq xs:date("2008-01-01")]')
–判断其中的表达式是否为真
select @f
--在XML列中使用exists()方法
SELECT StuInfo.query('/Student/Birthday') AS Birthday
FROM XMLStudent
WHERE StuInfo.exist('/Student/Birthday[(text()[1] cast as xs:date ?) = xs:date("1982-08-06") ]')=1
--
--10.5.3节示例
--
--使用value()查询XML列
SELECT StuInfo.value('(/Student/Name)[1]','nvarchar(20)') AS StuName –返回查询出的值
FROM XMLStudent2
--使用exists()代替value()
CREATE TABLE T (c1 int, c2 varchar(10), c3 XML)
GO
SELECT c1, c2, c3
FROM T
WHERE c3.value( '/root[1]/@a', 'integer') = c1 --有性能问题
GO
-- 可以写入以下语句:
SELECT c1, c2, c3
FROM T
WHERE c3.exist( '/root[@a=sql:column("c1")]') = 1 --代替方法
GO
--
--10.5.4节示例
--
--XML插入子节点
DECLARE @stuXML XML --定义XML变量
SET @stuXML='<Student>
<Name>何欢</Name>
<Sex>1</Sex>
<Birthday>1982-08-06</Birthday>
</Student>'
--接下来修改XML变量中的内容
SET @stuXML.modify('
insert <StudentID>2303002027</StudentID>
as first
into (/Student)[1]
')
SELECT @stuXML
--使用replace value of更新性别
DECLARE @stuXML XML
SET @stuXML='<Student>
<Name>何欢</Name>
<Sex>1</Sex>
<Birthday>1982-08-06</Birthday>
</Student>'
SET @stuXML.modify('
replace value of (/Student/Sex/text())[1]
with 0
')—替代性别中的值为0
SELECT @stuXML
--使用delete删除XML中的节点
DECLARE @stuXML XML
SET @stuXML='<Student>
<Name>何欢</Name>
<Sex>1</Sex>
<Birthday>1982-08-06</Birthday>
</Student>'
SET @stuXML.modify('
delete /Student/Birthday
') --删除指定XML节点
SELECT @stuXML
--
--10.5.5节示例
--
--使用nodes获得XML中的节点
DECLARE @stuXML XML
SET @stuXML='<Student>
<Name>何欢</Name>
<Sex>1</Sex>
<Birthday>1982-08-06</Birthday>
</Student>
<Student>
<Name>晏婉</Name>
<Sex>0</Sex>
<Birthday>1974-07-06</Birthday>
</Student>
'
SELECT T.c.query('.') as StuName--获得节点
FROM @stuXML.nodes('/Student/Name/text()') AS T(c) –获得指定路径的节点