SQL高级语法汇总
http://hi.baidu.com/vstudycn/blog/item/d34791d8292982e039012fb4.html
CUBE ROLLUP 及COMPUTE关键词
CUBE 关键词是用来将所要进行查询的各分组字段内的数据求和的运算。
COMPUTE关键字则是用来将分组做小计,也就是说将字段内进行分组并且将每一组生成一或多个总和 平均值等

范例
select cust_id,SUM(pay1) AS pay11 from pay_list GROUP BY pay1 WITH CUBE
go
以上代码导致错误因为在SUM汇总函数所指定的字段名称pay1与CUBE关键词一并使用所导致发生的错误消息
修改
SELECT cust_id,SUM(pay1) as pay11 FROM pay_list GROUP BY cust_id WITH CUBE
GO

ROLLUP关键词
将GROUP BY后面所加的第一个字段名称来求和而其他的字段并不做
ROLLUP以及CUBE关键词二者之间不同的地方就是ROLLUP只会将GROUP BY后面的第一个字段名称求总和而CUBE则会将每一个字段都求总和的操作

范例
SELECT 厂商编号,产品名称,SUM(数量) AS 总数量 FROM proced GROUP BY 厂商编号,产品名称 WITH ROLLUP
GO
COMPUTE关键词
用来将分组小计也就是在字段内进行分组,并且将每一组生成一或多个总和 平均值等
范例
select 厂商编号,产品名称,数量 from proced compute sum(数量)
go

以厂商编号作为分类根据时
select 厂商编号,产品名称,数量 from proced order by 厂商编号 COMPUTE SUM(数量) BY 厂商编号
go

RETURN 语句
将目前正在执行的批处理T-SQL语句,退出程序或语句中断,并返回或不返回数值。
当RETURN语句与存储过程一起使用时,其RETURN并不会返回一个NULL值。但当某程序尝试返回NULL值时,则会生成警告消息,接着会返回一个为0的数值。

语法声明
return [integer_expression]
integer_expression指要返回的整数值

范例
--return的使用范例
create procedurecheck_maxdata
as
if(select state from authors where au_id='123-34-45')
return 1
else
return 2
WAITFOR语句
WAITFOR语句是用来指定触发语句组,存储过程或事物执行的时间,时间间隔或事件。执行WAITFOR语句之后,必须等到指定的时间或指定的事件发生后,才能使用到SQL Server 的连接。
如果 想知道目前谁在使用或等待时,可以使用系统存储过程sp_who来了解。

声明语法
WAITFOR{DELAY 'time'|TIME 'time'}
参数说明
DELAY用来设置要SQL Server必须要等待所到指定的时数已过时,才可以使用SQL Server的连接
time 用来指定要等待的时间
只能指定时间而不能设置日期。其等待时间的设置最多可指定到24小时。

TIME用来指示SQL Server等待到所指定的时间。

范例
--此范例会在下午6:00时会执行select_data 存储过程
begin
waitfor TIME '18:00'
EXEC select_data
end

begin
waitfor TIME '15:20'
print 'ninhao'
end

范例
--WAITFOR DELAY的使用范例
use pubs
go
--设置要sql server 等待一分钟再执行下列语句
waitfor delay '00:01:00'
select * from authors
go
CASE
根据条件列表之后来执行表达式,其CASE可分为两种格式:
1 一种格式是属于简单的CASE格式,这种CASE会比较表达式与一组简单表达式,以便决定结果。
2 另一种格式是属于搜索的CASE格式,这种格式会评估一组布尔表达式,以便决定其结果。

简单CASE声明
CASE input_expression
WHEN when_expression THEN result_expression
[..n]
[
ELSE else_result_expression
END

如果想使用搜索CASE格式时,可以根据下面的语法来进行声明
CASE
WHEN Boolean_expression THEN result_expression
[..n]
[
ELSE else_result_expression
END

RAISERROR 语句
RAISERROR语句会返回用户所自定义的错误消息,并且设置系统旗标,记录曾发生过的错误。
使用RAISERROR指定用户自定义的错误消息时,请使用大于50,000的错误消息代码和0至18的重要性层级。

使用系统存储过程sp_addmessage来创建自定义的错误消息

RAISERROR语句其语法声明

使用RAISERROR语句来创建并返回用户自定义的错误信息时,请使用sp_addmessage来添加用户自定义的错误消息,并使用sp_dropmessage来删除用户自定义的错误消息。
发生错误时,错误代码会放置在@@ERROR函数中,此函数存放着最近生成的错误代码。

范例
--使用RAISERROR的范例
--使用sp_addmessage来创建自定义错误消息,其中76548是指错误代码,9是代表严重程度,而"错误消息测试"则是代表消息内容
EXEC sp_addmessage 76548,9,'错误消息测试'
GO
RAISERROR(76548,9,1)