存储过程xml格式参数!

JiaoPengJay 2011-05-30 04:30:19

<dv>
<date>2011-05-01</date>
<value1>1</value1>
<value2>2</value2>
<value3>3</value3>
<value4>4</value4>
<value5>5</value5>
<value6>6</value6>
<value7>7</value7>
</dv>
<dv>
<date>2011-05-02</date>
<value1>1</value1>
<value2>2</value2>
<value3>3</value3>
<value4>4</value4>
<value5>5</value5>
<value6>6</value6>
<value7>7</value7>
</dv>

有一XML格式的数据,要求根据XML里的数据进行对表A进行插入操作(XML的节点也就是数据库中的字段名)写个存储过程,以前没用过xml格式的参数,还有我这个xml格式写的对不对啊请高手帮帮,给点意见
...全文
330 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn 2011-05-31
  • 打赏
  • 举报
回复
自己学习一下APPLY的语法知识.
http://archive.cnblogs.com/a/1981828/
pete熊 2011-05-31
  • 打赏
  • 举报
回复
学习。。。
JiaoPengJay 2011-05-31
  • 打赏
  • 举报
回复
help,我的帖子沉下去啦!
help
liangCK 2011-05-31
  • 打赏
  • 举报
回复
看看联机丛书。
JiaoPengJay 2011-05-31
  • 打赏
  • 举报
回复
怎么没人啊,帮帮顶下也好呀!
JiaoPengJay 2011-05-31
  • 打赏
  • 举报
回复

declare @a xml
set @a='
<ShoppingCart>
<Purchase ProductID="7" Price="10.00" SaleDate="10/11/2006" SaleBatchID="4523" CustomerID="2398"/>
<Purchase ProductID="8" Price="25.00" SaleDate="10/11/2007" SaleBatchID="4522" CustomerID="2344"/>
</ShoppingCart>'
declare @aa varchar(100)
set @aa='/ShoppingCart[1]/Purchase[1]/@ProductID'
print @aa

现在获取的是ProductID="7"中的7,也能正确的获取的到,如果我想获取第二行中的ProductID="8"中的8怎么获取,按照道理应该是set @aa='/ShoppingCart[1]/Purchase[2]/@ProductID'这可可以获取的到,但是我在数据库里是不能写死的呀,应该是给它一个变量的值假如declare @cc int 赋值set @cc=2
set @aa='/ShoppingCart[1]/Purchase['+@cc+']/@ProductID'这样看起来应该可以的,但是运行起来是报错的“xml 数据类型方法 "value" 的参数 1 必须是字符串文字。”请高手帮助啊!
JiaoPengJay 2011-05-30
  • 打赏
  • 举报
回复
怎么没人啊!
JiaoPengJay 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ssp2009 的回复:]
SQL code
DECLARE @doc xml
SET @doc ='<?xml version="1.0" encoding="gb2312" ?>
<employees>
<employee>
<empid>e0001</empid>
<name>萧峰</name>
</employee>
<employ……
[/Quote]
INSERT people2
SELECT DISTINCT b.* FROM
(SELECT x = @doc.query('for $e in //employee return //employee[empid = $e/empid][last()]')) a --FLWOR时,用当前节点去//emploee节点集中找节点集中empid等于当前节点的empid, 在找到的集合中取最后一个利用last()函数
这句是执行插入操作,
那CROSS APPLY
(SELECT id=t.x.value('empid[1]','varchar(100)'),name=t.x.value('name[1]','varchar(100)') FROM a.x.nodes('//employee') AS t(x)) b
这句是做什么用的
快溜 2011-05-30
  • 打赏
  • 举报
回复
DECLARE   @doc  xml
SET @doc ='<?xml version="1.0" encoding="gb2312" ?>
<employees>
<employee>
<empid>e0001</empid>
<name>萧峰</name>
</employee>
<employee>
<empid>e0002</empid>
<name>段誉</name>
</employee>
<employee>
<empid>e0003</empid>
<name>王语嫣</name>
</employee>
<employee>
<empid>e0003</empid>
<name>张无忌</name>
</employee>
</employees>
'
create table people2
(
personid varchar(10) primary key ,
name varchar(20)
)

INSERT people2
SELECT DISTINCT b.* FROM
(SELECT x = @doc.query('for $e in //employee return //employee[empid = $e/empid][last()]')) a --FLWOR时,用当前节点去//emploee节点集中找节点集中empid等于当前节点的empid, 在找到的集合中取最后一个利用last()函数
CROSS APPLY
(SELECT id=t.x.value('empid[1]','varchar(100)'),name=t.x.value('name[1]','varchar(100)') FROM a.x.nodes('//employee') AS t(x)) b

SELECT * FROM people2
/*
e0001 萧峰
e0002 段誉
e0003 张无忌
*/
GO
快溜 2011-05-30
  • 打赏
  • 举报
回复
[url=http://social.msdn.microsoft.com/Forums/zh-CN/520/thread/ae9947fc-b97b-45d5-b688-65aedd051ec9[/url]

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧