DECLARE @ItemMessage XML
DECLARE @ItemTable TABLE(No NVARCHAR(300),zje NVARCHAR(300),yfje NVARCHAR(300),bcje NVARCHAR(300),URL NVARCHAR(300),Remark NVARCHAR(300))
SET @ItemMessage=N'<List>
<item> <No>SM-JG-201303-0189</No> <zje>273,240</zje> <yfje>81,972</yfje> <bcje>134620</bcje> <URL>http://eipwf.aspirehld.com/Workflow/Page/SYS_HTPS/WF_HTPS/HT_HTPS_Default.aspx?MID=163755&amp;SID=3&amp;PID=310284</URL> <Remark />
</item>
</List>'
INSERT INTO @ItemTable
(
No,
zje,
yfje,
bcje,
URL,
Remark
)
SELECT T.c.value('(No/text())[1]','NVARCHAR(300)'),
T.c.value('(zje/text())[1]','NVARCHAR(300)') ,
T.c.value('(yfje/text())[1]','NVARCHAR(300)') ,
T.c.value('(bcje/text())[1]','NVARCHAR(300)') ,
T.c.value('(URL/text())[1]','NVARCHAR(300)'),
T.c.value('(Remark/text())[1]','NVARCHAR(300)')
FROM @ItemMessage.nodes('/List/item') AS T(c)
SELECT * FROM @ItemTable

上面的内容是在网上找到的一个,具体的含义是 先定义一个XML格式的ItemMessage,在解析的时候,先去除节点List和item,然后获取内部的节点字段,最后把这个插入一个临时的ItemTable里。

这是网上给的方法,到了具体使用的时候,我们可能并不是这么使用,现在提供一种简单的使用方式,假设我现在表里的字段XmlData存储的就是ItemMessage样式的内容,首先通过cast命令将XmlData转换成XML类型的格式,然后通过它的Value属性进行分解,可以看到和上面的差不多,/List/item/No为逐层分级,最后的as No是给这个获取到的字段付了一个名字。

cast(XmlData as XML).value('(/List/item/No/text())[1]','NVARCHAR(300)') as No

通过上面的这句话就可以很容易的解析出需要的内容了,解析的结果为

SM-JG-201303-0189

附:昨天领导让导数据,写的SQL,做个备份
select a.EBILLNO,
a.EMPNAME,
a.APPLYDATE,
b.HS_NAME,
replace(replace(a.SUMMARY,char(10), ''),char(13),''),
cast(c.XmlData as XML).value('(/List/item/No/text())[1]','NVARCHAR(300)') as No,
cast(c.XmlData as XML).value('(/List/item/zje/text())[1]','NVARCHAR(300)') as zje,
cast(c.XmlData as XML).value('(/List/item/yfje/text())[1]','NVARCHAR(300)') as yfje,
cast(c.XMLData as XML).value('(/List/item/bcje/text())[1]','NVARCHAR(300)') as bcje,
cast(c.XMLData as XML).value('(/List/item/URL/text())[1]','NVARCHAR(300)') as URL,
cast(c.XMLData as XML).value('(/List/item/Remark/text())[1]','NVARCHAR(300)') as BZ,
cast(d.XMLData as XML).value('(/List/item/SKRXM/text())[1]','NVARCHAR(300)') as SKRXM,
('http://……?sid=3&mid=7281&PID='+a.PID) as bxdljdz
from Ex_Bill as a
left join Ex_System_Cfg as b on(a.BILLSYSTEMID=b.HS_ID and a.DATASYSTEMID=b.SYSTEM_NAME)
left join (select * from [192.168.3.23].Flow.dbo.RepeaingTable) as c on (c.Keyword='URL' and c.ProcessID=a.PID)
left join (select * from [192.168.3.23].Flow.dbo.RepeaingTable) as d on (d.Keyword='FKXX_New' and d.ProcessID=a.PID or d.Keyword='FKXX' and d.ProcessID=a.PID) where applyempid='zhongxun' and a.EBILLNO is not null
and status>5 and status not in(200,100,7000)
and a.APPLYDATE>'2011-01-01'
and a.HT='是'
order by a.ID desc
replace(replace(a.SUMMARY,char(10), ''),char(13),'')

这句话的意思是去除a.SUMMARY里的换行,刚开始并没有加replace这个命令,后来导出Excel后,发现有换行,因此加入了这个命令。

select * from [192.168.3.23].Flow.dbo.RepeaingTable

没有直接写表名,而加入了地址,是因为要联合查询的表不在同一个服务器下,查询多个服务器上的数据要先进行链接服务器的操作,这样才可以联合查询多个服务器。

链接服务器的方法是:先登录一个数据库的服务器,在Microsoft SQL Server Management Studio左侧的对象资源管理器里找到“服务器对象---链接服务器”,右键新建链接服务器。

最新文章

  1. mysql-mysql悲观锁和乐观锁
  2. atitit.ajax bp dwr 3.的注解方式配置使用流程总结.....
  3. Android Activity使用拾遗
  4. C#中Dynamic关键字
  5. android 实现橡皮擦效果以及保存涂鸦的功能
  6. Mac 切换Windows 使用虚拟机, 不推荐双系统
  7. 关于LINQ一个简单例子
  8. winform无边框拖动
  9. jqgrid项目使用记录/注释版/未整理/
  10. Web —— tomcat 问题解决
  11. VC中遍历进程并获取进程信息
  12. Unity 3D Framework Designing(4)——设计可复用的SubView和SubViewModel(Part 1)
  13. win8系统下,python 2.7安装xlrd,xlutils和xlwt的方法
  14. SQLServer2012基于扩展事件的阻塞监控
  15. java面向对象的思想(java三大特性)
  16. MacBook使用笔记1 - 快捷键与命令学习
  17. c#基础在winform操作数据库,实现增删改查
  18. 浅谈压缩感知(十七):测量矩阵之有限等距常数RIC的计算
  19. 【转】WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式
  20. ERP项目实施记录08

热门文章

  1. spark shuffle 相关细节整理
  2. kindeditor-4.1.3工具使用技巧:如何在编辑区上传图片并保存绝对路径
  3. 使用配置文件定义ADO.NET 的连接字符串
  4. 中文字符匹配js正则表达式
  5. redis主从配置及主从切换
  6. WINFORM 输出txt文件
  7. JS键盘KEYCODE值参考
  8. tf-idf知多少?
  9. spark 你要喧宾夺主么?好好干。
  10. 嵌入式linux下如何尽快播放开机音乐