sqlserver FOR XML PATH 语句的应用
代码如下:
DECLARE
@TempTable table(UserID int , UserName nvarchar(50));
insert into
@TempTable (UserID,UserName) values (1,'a')
insert into @TempTable
(UserID,UserName) values (2,'b')
select UserID,UserName
from @TempTable FOR XML PATH
运行这段脚本,将生成如下结果:
复制代码
代码如下:
<row>
<UserID>1</UserID>
<UserName>a</UserName>
</row>
<row>
<UserID>2</UserID>
<UserName>b</UserName>
</row>
大家可以看到两行数据生成了两个节点,修改一下PATH的参数:
select
UserID,UserName from @TempTable FOR XML PATH('lzy')
再次运行上述脚本,将生成如下的
结果:
复制代码
代码如下:
<lzy>
<UserID>1</UserID>
<UserName>a</UserName>
</lzy>
<lzy>
<UserID>2</UserID>
<UserName>b</UserName>
</lzy>
可以看到节点变成,其实PATH()
括号内的参数是控制节点名称的,这样的话大家可以看一下如果是空字符串(不是没有参数)会是什么结果?
select
UserID,UserName from @TempTable FOR XML PATH('')
执行上面这段脚本将生成结果:
复制代码
代码如下:
<UserID>1</UserID>
<UserName>a</UserName>
<UserID>2</UserID>
<UserName>b</UserName>
这样就不显示上级节点了,大家知道在 PATH 模式中,列名或列别名被作为 XPath
表达式来处理,也就是说,是列的名字,这样大胆试验一下不给指定列名和别名会是怎么样?
select CAST(UserID AS
varchar) + '',UserName + '' from @TempTable FOR XML PATH('')
运行上面这句将
生成结果
1a2b
所有数据都生成一行,而且还没有连接字符,这样的数据可能对大家没有用处,还可以再变化一下:
select
CAST(UserID AS varchar) + ',',UserName + '',';' from @TempTable FOR XML
PATH('')
生成结果
1,a;2,b;
大家现在明白了吧,可以通过控制参数来生成自己想要的结果,
例如:
select '{' + CAST(UserID AS varchar) + ',','"' +UserName +
'"','}' from @TempTable FOR XML PATH('')
生成结果
{1,"a&q
相关文档:
看结论请直接看下面
今天写生成xml的php。没有用什么XMLDOMNode之类的来生成,而是直接echo出xml的内容。
xml的内容中有一部分的数据是从db中循环取出的,问题就出在这。我发现全部取出数据时,对于生成的xml,simplexml_load_string返回false,即表明生成的xml是非法的。
debug一下,发现取出数据加以限制 limit 8 一下 ......
XML 命名空间可提供避免元素命名冲突的方法。
命名冲突
由于 XML 中的元素名是预定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。
这个 XML 文档携带着某个表格中的信息:
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</ta ......
本来我是不赞成使用通用存储过程的,主要是因为根据表结构来定制分页查询不用动态的拼SQL,这样才是真正的高效,而且只要写过一个,那么再有新需求的时候,小范围改动几处就ok了。
但总是有人向我讨要或者讨论通用存储过程,没办法,被逼无奈,良心丧与困境。
木有找到T-SQL代码编辑器
-- ============================= ......
一、基础
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说 ......
现象:
现在做一个程序,对数据库的几个装有大量数据的表进行操作,对其中的一个表进行
循环操作,以处理其他的几个表。其中用到了几个query,update,当程序跑的过程中,
SQLSERVER的内存不断的增长,跑完后关闭程序退出后也不降下来。
解决:
这是SQL的内存管理机制决定的,SQL管理内存的原则是这样的,只要你的内存够 ......