IamV.Victor
Crazystudy!Day Day UP!
社区
首页
联系
管理
订阅
随笔- 67 文章- 8 评论- 3
[转]SQL Server的几'点'
MS-SQL Server
select * from Book where BookName like'%C语言%'
在SQL2000下能正常找到,在2005下不能,因为语句中的中文字体, 但是使用
select * from Book where BookName like N'%C语言%' ,这样就完合正常了,
Like 后的N是表示什么意思呢
unicode字符
N转换字符串为nchar,nvarchar
当把客户端发送的非 Unicode 数据以 Unicode 存储在服务器中时,如果具备下列条件之一,则来自任何客户端的任何代码页的数据都可以正确地存储
字符串常量以大写字母 N 开头。无论客户端应用程序是否能够识别 Unicode,必需这样做。如果没有字母 N 前缀,则 SQL Server 会将字符串转换为与数据库的默认排序规则相对应的代码页。此代码页中没有的字符都将丢失。
========================================================
========================================================
select
coalesce
(
nullif
(type_a,
997
),
0
)
as
type_a
from
tbl
nullif接受两个参数,如果两个参数相等,那么返回null,否则返回第一个参数
coalesce接受N个参数,返回第一个不为null的参数
首先,建立两个表:
CREATE
TABLE
#a (ID
INT
)
INSERT
INTO
#a
VALUES
(
1
)
INSERT
INTO
#a
VALUES
(
2
)
INSERT
INTO
#a
VALUES
(
null
)
CREATE
TABLE
#b (ID
INT
)
INSERT
INTO
#b
VALUES
(
1
)
INSERT
INTO
#b
VALUES
(
3
)
我们的目的是从表#b中取出ID不在表#a的记录。
如果不看具体的insert的内容,单单看这个需求,可能很多朋友就会写出这个sql了:
select
*
from
#b
where
id
not
in
(
select
id
from
#a)
但是根据上述插入的记录,这个sql检索的结果不是我们期待的ID=3的记录,而是什么都没有返回。原因很简单:在子查询select id from #a中返回了null,而null是不能跟任何值比较的。
那么您肯定会有下面的多种写法了:
select
*
from
#b
where
id
not
in
(
select
id
from
#a
where
id
is
not
null
)
select
*
from
#b b
where
b.id
not
in
(
select
id
from
#a a
where
a.id
=
b.id)
select
*
from
#b b
where
not
exists
(
select
1
from
#a a
where
a.id
=
b.id)
当然还有使用left join/right join/full join的几种写法,但是无一例外,都是比较冗长的。其实在SQL Server 2005增加了一种新的方法,可以帮助我们很简单、很简洁的完成任务:
select
*
from
#b
except
select
*
from
#a
我不知道在SQL Server 2008里还有没有什么更酷的方法,但是我想这个应该是最简洁的实现了。当然,在2005里还有一种方法可以实现:
select
*
from
#b b
outer
apply
(
select
id
from
#a a
where
a.id
=
b.id) k
where
k.id
is
null
outer apply也可以完成这个任务。
如果我们要寻找两个表的交集呢?那么在2005就可以用
intersect
关键字:
select
*
from
#b
intersect
select
*
from
#a
ID
--
---------
1
(
1
row(s) affected)
转自:维生素C.net()
http://www.cnblogs.com/fanweixiao/category/127303.html
posted @ 2008-03-30 15:58
IamV
阅读(38)
评论(0)
编辑
收藏
所属分类:
SQL
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-04-02 12:41 编辑过
相关文章:
LINQ to SQL语句入门篇
LINQ to SQL异步查询
MS SQL Server 2000安装不成功的原因
上海长途汽车站客运站点及时刻表
SQL Server 2008 的新标志
Microsoft SQL Server 2008 正式发布
SQL疑难杂症
SQL大小写习惯?
谈谈LINQ to SQL
怎么查看Linq运行时生成的SQL语句?
相关链接:
所属分类的其他文章:
行列互转_整理贴[转]
不同服务器数据库之间的数据操作
Some Test
[转]cross apply,WITH AS, ROW_NUMBER(),OVER(),object_id()
SQL CURSOR 游标
[转]SQL Server的几'点'
[转]SQL中使用WITH AS提高性能
SQL中各种日期的算法
SQL中CONVERT转化函数的用法
SQL Server 简单命令
最新IT新闻:
Google向Wine贡献更多代码
苹果创始人Steve Wozniak称iPod将被淘汰
福布斯:硅谷日子将更难过 谁下一个倒下
微软老矣 尚能赚否?
YouTube探索新赢利模式 开始售音乐、视频游戏
<
2008年3月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
最新评论
我的标签
留言簿
给我留言
查看留言
我参与的团队
WCF技术研究团队(2/178)
随笔分类
AJAX(5)
(rss)
ASP.NET(26)
(rss)
C#(3)
(rss)
DHTML(13)
(rss)
Flash
(rss)
Javascript(9)
(rss)
SQL(10)
(rss)
随笔档案
2008年9月 (4)
2008年8月 (4)
2008年7月 (1)
2008年6月 (3)
2008年5月 (5)
2008年3月 (4)
2008年2月 (12)
2008年1月 (18)
2007年12月 (16)
文章分类
ASP.NET(3)
(rss)
C#
(rss)
Flash
(rss)
Javascript(1)
(rss)
资源(4)
(rss)
收藏夹
ASP.NET学习(52)
(rss)
ExtJS(7)
(rss)
HTML(29)
(rss)
LINQ(4)
(rss)
SQL SP(30)
(rss)
WCF/WPF/MVC/Silverlight(19)
(rss)
XML/Serializer/Stream/ZIP(2)
(rss)
随手收藏(35)
(rss)
图像处理(9)
(rss)
综合学习(9)
(rss)
Victor
artech
Cat Chen
codeproject
Hi
IamV-Zone
idior
rainsts.net
UI-CSSRain
webabcd
张逸(WCF)
最新评论
1. re: 【转】System.Transactions类
(IamV)
60天内阅读排行
1. dataTable中筛选数据(datatable.select 和dataview.RowFilter)(77)
2. 全球化与本地化之全球化 多语言简单实现(63)
3. 反射(47)
4. [转]ASP.NET 2.0中MemberShip数据库的安装、配置及文档结构(一)(42)
5. Membership角色与权限管理(35)