灵活运用 SQL SERVER FOR XML PATH
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主. 一.FOR XML PATH 简单介绍 那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT*FROM@hobbyFOR XML PATH
结果: <row> <hobbyID>1</hobbyID> <hName>爬山</hName> </row> <row> <hobbyID>2</hobbyID> <hName>游泳</hName> </row> <row> <hobbyID>3</hobbyID> <hName>美食</hName> </row>
由此可见FOR XML PATH 可以将查询结果根据行输出成XML各式! 那么,如何改变XML行节点的名称呢?代码如下: SELECT*FROM@hobbyFOR XML PATH('MyHobby')
结果一定也可想而知了吧?没错原来的行节点<row> 变成了我们在PATH后面括号()中,自定义的名称<MyHobby>,结果如下: <MyHobby> <hobbyID>1</hobbyID> <hName>爬山</hName> </MyHobby> <MyHobby> <hobbyID>2</hobbyID> <hName>游泳</hName> </MyHobby> <MyHobby> <hobbyID>3</hobbyID> <hName>美食</hName> </MyHobby>
这个时候细心的朋友一定又会问那么列节点如何改变呢?还记的给列起别名的关键字AS吗?对了就是用它!代码如下: SELECT hobbyID as'MyCode',hName as'MyName'FROM@hobbyFOR XML PATH('MyHobby')
那么这个时候我们列的节点名称也会编程我们自定义的名称 <MyCode>与<MyName>结果如下: <MyHobby> <MyCode>1</MyCode> <MyName>爬山</MyName> </MyHobby> <MyHobby> <MyCode>2</MyCode> <MyName>游泳</MyName> </MyHobby> <MyHobby> <MyCode>3</MyCode> <MyName>美食</MyName> </MyHobby>
噢! 既然行的节点与列的节点我们都可以自定义,我们是否可以构建我们喜欢的输出方式呢?还是看代码: SELECT'[ '+hName+' ]'FROM@hobbyFOR XML PATH('')
没错我们还可以通过符号+号,来对字符串类型字段的输出格式进行定义。结果如下: [ 爬山 ][ 游泳 ][ 美食 ]
那么其他类型的列怎么自定义? 没关系,我们将它们转换成字符串类型就行啦!例如: SELECT'{'+STR(hobbyID)+'}','[ '+hName+' ]'FROM@hobbyFOR XML PATH('')
好的 FOR XML PATH就基本介绍到这里吧,更多关于FOR XML的知识请查阅帮助文档! 接下来我们来看一个FOR XML PATH的应用场景吧!那么开始吧。。。。。。 二.一个应用场景与FOR XML PATH应用 首先呢!我们在增加一张学生表,列分别为(stuID,sName,hobby),stuID代表学生编号,sName代表学生姓名,hobby列存学生的爱好!那么现在表结构如下: 这时,我们的要求是查询学生表,显示所有学生的爱好的结果集,代码如下: SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM ( SELECT sName, (SELECT hobby+','FROM student WHERE sName=A.sName FOR XML PATH('')) AS StuList FROM student A GROUPBY sName ) B
结果如下: 分析: 好的,那么我们来分析一下,首先看这句: SELECT hobby+','FROM student WHERE sName=A.sName FOR XML PATH('')
这句是通过FOR XML PATH 将某一姓名如张三的爱好,显示成格式为:“ 爱好1,爱好2,爱好3,”的格式! 那么接着看: SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby FROM ( SELECT sName, (SELECT hobby+','FROM student WHERE sName=A.sName FOR XML PATH('')) AS StuList FROM student A GROUPBY sName ) B
剩下的代码首先是将表分组,在执行FOR XML PATH 格式化,这时当还没有执行最外层的SELECT时查询出的结构为: 可以看到StuList列里面的数据都会多出一个逗号,这时随外层的语句:SELECT B.sName,LEFT(StuList,LEN(StuList)-1) as hobby 就是来去掉逗号,并赋予有意义的列明! |
编写新闻发布系统 显示新闻条目时间问题span标签放在a标签前面,然后将span标签float:right。切记切记。
新闻列表中为了显示时间,加了个span <LI><A href="{NS:FS_NewsURL}">{NS:FS_NewsTitle}</A><span style="float:right">{NS:FS_AddTime}</span></LI> 结果这个 span竟然跑到下面去了 经过一天时间无数次的上网查资料、修改、测试 问题还是没有解决 而且遇到了更灵异的事,给前面超链接加左 浮动,在ie下文字竟然跑到列表符号前面去了 无语 分析:ie下列表符号应该没有包含在li内 span本来不换行,加浮动后成了块 元素,顶部不能高于前一元素底部 于是我又改呀改改呀改 晕,还是没改好 另一篇文章里: 例子:<h1 style=”display:inline;”>如何解决</h1><span style=”float:right;”>span右对齐的问题</span>这样的写法经过测试在IE8和firefox阅读器里可以准确显示在同一行,而在360阅读器中”span右对齐的问题”这几个字却显示到下一行的最右边,原因和解决方式如下: 当非float的元素和float的元素在一起的时候,假如非float元素在先,那么float的元素将被排挤 也就是说,你的span是float:right,但是前面h1的内容”如何解决”还是float:none,假如要<span>前后文字盘踞同一行, 一般有两个解决方式: 1、把<sapn style=”float:right”>span右对齐的问题</span>代码置于<h1>前 <sapn style=”float:right;”>span右对齐的问题</span>:<h1 style=”display:inline;”>如何解决</h1> 2、给前面的文本设置float属性 <h1 style=”display:inline;float:left;”>如何解决</h1><span style=”float:right;”>span右对齐的问题</span> 2013-4-23 修改 |
Linux 标准目录结构
初学Linux,首先需要弄清Linux 标准目录结构 /
/:根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中 /bin:/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。 /boot:放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可 /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt。 /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。 注:/etc/X11存放与x windows有关的设置。 /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据 /lib:/usr/lib:/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。 /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found /mnt:/media:光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。 /opt:给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下 /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等 /root:系统管理员root的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。 /sbin:/usr/sbin:/usr/local/sbin:放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。 /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下 /srv:服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内 /usr:应用程序存放目录,/usr/bin存放应用程序,/usr/share存放共享数据,/usr/lib存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc:系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间 /var:放置系统执行过程中经常变化的文件,如随时更改的日志文件/var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间 |