在SQL2005中T-SQL的增强部分

(1) Error Handling
SQL Server2000没有这种Try-Catch 工具,古人们只好用检查@@Error变量的办法来看看出没出错. 现在技术先进了,这样写就可以了
BEGIN TRY
BEGIN TRANSACTION
一些Code
END TRANSACTION
END TRY
BEGIN CATCH
处理的Code
END CATCH

处理的Code可以使用下列函数,
ERROR_NUMBER():错误代号
ERROR_SEVERITY(): 错误等级
ERROR_STATE(): 错误状态
ERROR_MESSAGE():信息
ERROR_LINE():行号
ERROR_PROCEDURE(): Procedure的名字
XACT_STATE(): Transaction的状态. 0正常,1 出错
RAISEERROR():如果感觉很严重,可以重新把Error放出去,由上级处理.

(2) 新加的Intersect和Except
就是放在两组Select语句之间,看交集和补集的. 使用了这个语句之后,Group By, Having 只能用在各个Select的子集中, Order By只管最后的结果.

(3) Top 子句在2005中,可以用在Delete, Update, Insert中. 从前用在Select中的时候,表示前几名的意思, Top(10) with Ties 之类. 注意,一定要打括号.

(4) Output 命令
等于可以塞在Insert, Delete, Update中的Select, 返回一个表,这样可以眼睁睁的看见什么东西被改了,改成什么了. Output语句位置可以放在这些语句的中间, 返回值就是执行完毕的,但是又没有触发Trigger那个时刻. 有两个临时Table可以用,一个是Inserted, 一个是Deleted. Insert命令没有Deleted 表,Delete命令没有Inserted表, Update命令两个表都有.
比如:
Insert into 某某表
Output Inserted.某某列 as [输出表头的名字], Inserted.其他列
Value(XXX)
注意上个例子中的点号和逗号.

(5) Outer Apply  Cross Apply
这个和outer join, cross join 实现相同的功能, 唯一的区别是不需要写Where语句. 由Sql Server自动找到同名的项,然后Join起来.

(6) CTE (Common Table Express)
就是生成临时Table那种, 基本格式是With 临时表的名字(参数名) AS (Select 语句 ), 另一个With句, Select 语句.
例如:

With 表1 (列1, 列2) As ( Select id, name from student)
With 表2 As (Select teacher from school)
Select 表1.列1 From 表1 inner join 表2

无意中看到一个有趣的When Then  Else- End As 列名, 用法.
就是在Select语句中根据某个标准输出不同的String.比如,根据成绩,写上及格通过什么的.
比如:
Select ID
CASE
When ID in 大侠表
Then 大侠
Else 草民
End As 身份
From
全体人员表

输出的标题就是 ID 和 身份,然后底下根据各人ID列出身份.

(7) 递归查询
递归就是反复调用自身. 看起来费劲,其实很简单,就是CTE的一个应用而已. 基本原则就是定义一个表,然后在内部的Select语句中重复引用这个表名,就是了. 可以借助于Union 关键词来构成. 比如
With 某表1 As
(
Select 语句
Union
Select 语句 From 某表2
Join
某表1
)

(8) Pivot 和Unpivot进行行列转换

Pivot的行列转换就是把每行的数据变成列. 一个一维的表变成2维, 比如一个表吧,每一行是每天每种产品的销售额. 想变成二维表看看一周七天每种产品的销量,就要用到Pivot.
Unpivot就是和Pivot逆转, 把二维表摊平变成一维表.
比如, 有一个数据库的表, 统计产品数量. 列包括,产品编号, 时间,数量. Pivot之后,就把时间转换成列, 产品编号变成行, 然后新的列就是几个时间段, 每行是一个产品编号的数量.
Unpivot就是把第二个表变回第一个表

http://ningoo.itpub.net/post/2149/281485

(9) Ranking  Partitioning

Ranking 就是排序.给每个数据一个排名. 通常的用法是
Select ROW_NUMBER() OVER (ORDER BY ID) AS [ROW NUMBER]
FROM XXX

其中, ROW_NUMBER()是个Ranking函数,类似的函数还有一批, Over是必配的关键词, 后面接一个Order By的语句, 然后是其他的From 语句

除了Row_Number这种很不精确的东西之外, 还可以用Rank, Dense_rank, Ntile来取值.Rank就是从1开始排序,相同值可以以任何序列出现, Dense_Rank就是相同值给定一个相同的Rank,就是允许并列的意思. Ntile就是分成几个小片,
用法是Ntile(某个数) 这里某个数就是分成多少个小片的意思.

Partitioning就是分成几个区,每个区都从头开始数,就是每次都从1开始.
用法是在Over后面的括号里加一个Partition By语句
Select Row_number() over (
Partition By 某某列,
Order By 某某列

)

10. Table 采样
关键词是TableSample
Select 某某东西 From 某某表
Tablesample System (10)

Tablesample后面跟一个数,表示取样百分之几的意思. 也可以写Tablesample(10 Percent) 或者Tablesample(100 Rows)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值