declare @myxml xml set @myxml='<?xml version="1.0" encoding="gb2312"?> <root> <item id="1"> </item> </root>' select @myxml--1、插入item的第一个子元素 set @myxml.modify('insert <course1>sql server2005</course1> into (root/item)[1]') select @myxml --2、插入item的第一个子元素,插入到同级子元素前面 set @myxml.modify('insert <sname> 王一诺</sname> as first into (root/item)[1]') select @myxml --3、插入item的第一个子元素,插入到同级子元素后面 set @myxml.modify('insert <grade>82</grade> as last into (root/item)[1]') select @myxml --4、插入第二个item节点 set @myxml.modify('insert <item id="2" year="2009"></item> into (/root)[1]') select @myxml --或者 set @myxml.modify('insert <item id="2" year="2009"></item> after (/root/item)[1]') --5、向第二个item节点插入多个元素 set @myxml.modify('insert (<sname>王海</sname>,<course1>sql server2005</course1>,<grade>75</grade>) into (/root/item)[2]') --6、插入属性 set @myxml.modify('insert attribute year{"2009"} into (/root/item)[1]') select @myxml --7、插入多个属性 set @myxml.modify('insert (attribute depart{"计算机"},attribute class{"1班"}) into (/root/item)[1]') --8、插入文本节点 set @myxml.modify('insert text{"成绩表"} as first into (/root)[1]') --9、插入整个节点 set @myxml.modify('insert <item id="3" year="2009"> <sname>王若天</sname> <course1>oracle</course1> <grade>59</grade></item> into (/root)[1]') --10、插入处理指令 SET @myxml.modify('insert <?Program ="Instructions.exe" ?> before (/root)[1] ') select @myxml 二、删除操作 declare @myxml xml set @myxml='<?Program ="Instructions.exe" ?> <root>成绩表--这是个文本节点 <item id="1" year="2009" depart="计算机" class="1班"> <sname> 王一诺</sname> <course1>sql server2005</course1> <grade>82</grade> </item> <item id="2" year="2009" class="1班"> <sname>王海</sname> <course1>sql server2005</course1> <grade>75</grade></item> <item id="3" year="2009" class="1班"> <sname>王若天</sname> <course1>oracle</course1> <grade>59</grade> </item> </root>'--1、删除所有指令 set @myxml.modify('delete //processing-instruction()') select '删除所有指令'=@myxml --2、删除文本节点 set @myxml.modify('delete /root/text()') select '删除文本节点'=@myxml --3、删除节点id为的属性 set @myxml.modify('delete /root/item[@id=1]/@class') select '删除节点id为的属性'=@myxml --4、删除第二个节点属性 set @myxml.modify('delete /root/item[2]/@class') select '删除第二个节点属性'=@myxml --5、删除节点属性 set @myxml.modify('delete /root/item/@class') select '删除节点属性'=@myxml --6、删除节点id为的元素 set @myxml.modify('delete /root/item[@id=1]/grade') select '删除节点id为的元素'=@myxml --7、删除第二个节点元素 set @myxml.modify('delete /root/item[2]/grade') select '删除第二个节点元素'=@myxml --8、删除元素 set @myxml.modify('delete /root/item/grade') select '删除元素'=@myxml --9、删除id为的节点 set @myxml.modify('delete /root/item[@id=2]') select '删除id为的节点'=@myxml --10、删除第二个的节点 set @myxml.modify('delete /root/item[2]') select '删除id为的节点'=@myxml --11、删除第二个节点 set @myxml.modify('delete /root/item') select '删除节点'=@myxml 三、修改操作 --1、修改文本的值 set @myxml.modify('replace value of(/root/text())[1] with "1班成绩表"') select @myxml --2、修改元素的值 set @myxml.modify('replace value of(/root/item[@id=3]/grade/text())[1] with "60"') select @myxml --3、修改属性的值 set @myxml.modify('replace value of(/root/item[@id=1]/@class)[1] with "2班"') select @myxml
http://topic.csdn.net/u/20081107/17/68aaf5a9-c596-4ab5-ae18-f3370b2ab35b.html
看英文版的。http://www.itpub.net/viewthread.php?tid=1087206
set @myxml='<?xml version="1.0" encoding="gb2312"?>
<root>
<item id="1">
</item>
</root>'
select @myxml--1、插入item的第一个子元素
set @myxml.modify('insert <course1>sql server2005</course1> into (root/item)[1]') select @myxml
--2、插入item的第一个子元素,插入到同级子元素前面
set @myxml.modify('insert <sname> 王一诺</sname> as first into (root/item)[1]') select @myxml
--3、插入item的第一个子元素,插入到同级子元素后面
set @myxml.modify('insert <grade>82</grade> as last into (root/item)[1]') select @myxml
--4、插入第二个item节点
set @myxml.modify('insert <item id="2" year="2009"></item> into (/root)[1]') select @myxml
--或者
set @myxml.modify('insert <item id="2" year="2009"></item> after (/root/item)[1]')
--5、向第二个item节点插入多个元素
set @myxml.modify('insert (<sname>王海</sname>,<course1>sql server2005</course1>,<grade>75</grade>) into (/root/item)[2]')
--6、插入属性
set @myxml.modify('insert attribute year{"2009"} into (/root/item)[1]')
select @myxml
--7、插入多个属性
set @myxml.modify('insert (attribute depart{"计算机"},attribute class{"1班"}) into (/root/item)[1]')
--8、插入文本节点
set @myxml.modify('insert text{"成绩表"} as first into (/root)[1]') --9、插入整个节点
set @myxml.modify('insert <item id="3" year="2009">
<sname>王若天</sname>
<course1>oracle</course1>
<grade>59</grade></item>
into (/root)[1]')
--10、插入处理指令
SET @myxml.modify('insert <?Program ="Instructions.exe" ?> before (/root)[1] ')
select @myxml
二、删除操作
declare @myxml xml
set @myxml='<?Program ="Instructions.exe" ?>
<root>成绩表--这是个文本节点
<item id="1" year="2009" depart="计算机" class="1班">
<sname> 王一诺</sname>
<course1>sql server2005</course1>
<grade>82</grade>
</item>
<item id="2" year="2009" class="1班">
<sname>王海</sname>
<course1>sql server2005</course1>
<grade>75</grade></item>
<item id="3" year="2009" class="1班">
<sname>王若天</sname>
<course1>oracle</course1>
<grade>59</grade>
</item>
</root>'--1、删除所有指令
set @myxml.modify('delete //processing-instruction()')
select '删除所有指令'=@myxml
--2、删除文本节点
set @myxml.modify('delete /root/text()')
select '删除文本节点'=@myxml
--3、删除节点id为的属性
set @myxml.modify('delete /root/item[@id=1]/@class')
select '删除节点id为的属性'=@myxml
--4、删除第二个节点属性
set @myxml.modify('delete /root/item[2]/@class')
select '删除第二个节点属性'=@myxml
--5、删除节点属性
set @myxml.modify('delete /root/item/@class')
select '删除节点属性'=@myxml
--6、删除节点id为的元素
set @myxml.modify('delete /root/item[@id=1]/grade')
select '删除节点id为的元素'=@myxml
--7、删除第二个节点元素
set @myxml.modify('delete /root/item[2]/grade')
select '删除第二个节点元素'=@myxml
--8、删除元素
set @myxml.modify('delete /root/item/grade')
select '删除元素'=@myxml
--9、删除id为的节点
set @myxml.modify('delete /root/item[@id=2]')
select '删除id为的节点'=@myxml
--10、删除第二个的节点
set @myxml.modify('delete /root/item[2]')
select '删除id为的节点'=@myxml
--11、删除第二个节点
set @myxml.modify('delete /root/item')
select '删除节点'=@myxml
三、修改操作
--1、修改文本的值
set @myxml.modify('replace value of(/root/text())[1] with "1班成绩表"')
select @myxml
--2、修改元素的值
set @myxml.modify('replace value of(/root/item[@id=3]/grade/text())[1] with "60"')
select @myxml
--3、修改属性的值
set @myxml.modify('replace value of(/root/item[@id=1]/@class)[1] with "2班"')
select @myxml
问题描述:有表tb, 如下:id values----------- -----------1 aa,bb2 aaa,bbb,ccc 欲按,分拆values列, 分拆后结果如下:id value----------- --------1 aa1 bb2 aaa2 bbb2 ccc 1. 旧的解决方法SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns bSELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id)FROM tb A, # BWHERE SUBSTRING(',' + A.[values], B.id, 1) = ',' DROP TABLE # -- 2. 新的解决方法 -- 示例数据DECLARE @t TABLE(id int, [values] varchar(100))INSERT @t SELECT 1, 'aa,bb'UNION ALL SELECT 2, 'aaa,bbb,ccc' -- 查询处理SELECT A.id, B.valueFROM( SELECT id, [values] = CONVERT(xml, '<root><v>' + REPLACE([values], ',', '</v><v>') + '</v></root>') FROM @t)AOUTER APPLY( SELECT value = N.v.value('.', 'varchar(100)') FROM A.[values].nodes('/root/v') N(v))B /*--结果id value----------- --------1 aa1 bb2 aaa2 bbb2 ccc (5 行受影响)--*/CSDN 社区帖子地址
附: 合并与分拆的CLR, sql2005的示例中有:
在安装sql 2005的示例后,默认安装目录为 drive:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\StringUtilities中本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjcxc/archive/2006/06/09/784276.aspx
【交流】SQL 2005溢用之:合并列值 收藏
问题描述:无论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理下列要求时,会比较麻烦: 有表tb, 如下:id value----- ------1 aa1 bb2 aaa2 bbb2 ccc 需要得到结果:id values------ -----------1 aa,bb2 aaa,bbb,ccc 即, group by id, 求 value 的和(字符串相加) 1. 旧的解决方法-- 1. 创建处理函数CREATE FUNCTION dbo.f_str(@id int)RETURNS varchar(8000)ASBEGIN DECLARE @r varchar(8000) SET @r = '' SELECT @r = @r + ',' + value FROM tb WHERE id=@id RETURN STUFF(@r, 1, 1, '')ENDGO -- 调用函数SELECt id, values=dbo.f_str(id) FROM tb GROUP BY id -- 2. 新的解决方法 -- 示例数据DECLARE @t TABLE(id int, value varchar(10))INSERT @t SELECT 1, 'aa'UNION ALL SELECT 1, 'bb'UNION ALL SELECT 2, 'aaa'UNION ALL SELECT 2, 'bbb'UNION ALL SELECT 2, 'ccc' -- 查询处理SELECT *FROM( SELECT DISTINCT id FROM @t)AOUTER APPLY( SELECT [values]= STUFF(REPLACE(REPLACE( ( SELECT value FROM @t N WHERE id = A.id FOR XML AUTO ), '<N value="', ','), '"/>', ''), 1, 1, ''))N /*--结果id values----------- ----------------1 aa,bb2 aaa,bbb,ccc (2 行受影响)--*/CSDN 社区帖子地址 附: 合并与分拆的CLR, sql2005的示例中有:
在安装sql 2005的示例后,默认安装目录为 drive:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\StringUtilities中本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjcxc/archive/2006/06/09/784287.aspx