[id] int NOT NULL IDENTITY(1,1) ,
[name] varchar(50) NULL ,
[age] int NULL ,
[createDate] datetime NULL DEFAULT (getdate())
)
语法
简单case函数
case input_expression
when when_expression then result_expressin
[...n]
else else_result_expression
end
example:
select (case age when 11 then 'student' when 23 then 'teacher' else 'other' end) as category from event
case搜索函数:
case whenboolean_expression then result_expressin [...n]else else_result_expression end
example:
SELECT (case WHEN age=11 THEN 'stu' WHEN age=22 THEN 'tea' ELSE 'other' END) AS agenum,id,age from event
在orderby中使用case
当查询的id值为2103695684不为空时,按照id字段排序,else按照age字段排序
SELECT (case WHEN age=11 THEN 'stu' WHEN age=22 THEN 'tea' ELSE 'other' END) AS agenum,id,age FROM event
ORDER BY (CASE when (SELECT id from event WHERE id=2103695684) is NOT NULL THEN id ELSE age END) DESC
while的使用 while的语法while .......end
declare @num int
while((select count(*) from event)>1)
begin
set @num=(select count(*) from event)
if(@num>12) break
else print 'ok'
end
select @num
MSSQL的游标的简单使用,先看如下代码:
declare mycursor cursor for 声明游标
select id,name from table 游标所要索引的记录集
open mycursor 打开游标
declare @id int 声明一些变量用来存储当前游标索引到的记录的字段值
declare @name varchar(10)
fetch next from mycursor into @id,@name 开始移动游标到第一条记录,并且读取该记录的字段值到相应变量中
while (@@fetch_status=0) @@fetch_status 0表示读取记录成功,100表示读到了最后一条记录
begin begin相当于{ 所以不能省
print @id 可以针对当前记录的某些字段值进行一系列SQL语句的处理
fetch next from mycursor into @id,@name 一定要在SQL语句处理后移动到下一条记录
end end相当于} 所以不能省
close mycursor 关闭游标
deallocate mycursor 释放游标
附加:
------判断两个值是否相等,相等返回空值,不等则返回第一个表达式的值----------
SELECT NULLIF(1,1)
---类型转换----
SELECT CAST(23/2 AS INTEGER)
---对时间进行增加或减少 DATEADD--
SELECT DATEADD(MONTH, -1, GETDATE())
---用于计算两个日期之间的差额 DATEDIFF---
SELECT DATEDIFF(YEAR,GETDATE(), DATEADD(MONTH, 1, GETDATE()))
SELECT DATENAME(YEAR, GETDATE())
----通配符的使用[str]含有str表达式中的任何一个字符[^str]不含有表达式中的任何一个字符------
SELECT * FROM event WHERE name LIKE '[^l]%'
还在学习中。。。。。。。。
一篇关于数据库优化的文章,大家可以参考参考http://www.cnblogs.com/hnlshzx/p/3500365.html