http://blog.163.com/guiguixyz@126/blog/static/65031961201443105440279/


函数

{

字符串函数

{

len():获取字符串长度

upper():转为大写字符

lower():转为小写字符

ltrim():去掉左端空格

rtrim():去掉右端空格

left():从左端开始截取指定长度子串

right():从右端开始截取指定长度子串

substring()

{

截取从指定位置开始的指定长度的子串

首位字符索引为1

索引可以为负,表示首字符之前的某位

}

}

abs():求数值的绝对值

ceiling():数值向上取整

datalength():计算数据占用的字节数

日期函数

{

getdate():获取当前日期

sysdatetime():获取高精度时间

dateadd(时间增加部分,时间增加量,基础时间):获取增加后的时间

datediff(时间相减部分,减数,被减数):计算两时间之差

datepart(日期部分,源日期):获取日期某部分的值,返回数值类型

datename(日期部分,源日期):获取日期某部分的值,返回字符串

简写

{

year(源日期):年

month(源日期):月

day(源日期):日

}

}

类型转换函数

{

cast(expression as datatype)

convert(datatype, expression[, style])

}

}


编程基础

{

局部变量

{

声明:declare @XXX 类型, @XXX 类型

赋值

{

set 变量=值 (查询子句返回多值时报错)

select 变量=值 (查询子句返回多值时赋最后一个值)

}

不赋值时变量值为NULL

}

全局变量

{

声明:@@XXX

一般为系统变量 (系统变量不可更改)

}

case

{

写法一

{

case

when XX  then XX

when XX  then XX

else XX

end

}

写法二

{

case XX

when X then XX

when X then XX

else XX

end

此种写法只能判断等值

}

then后数据类型必须一致

一般用于选择性显示列值

}

while

{

declare @i int=1

while @i<=100

begin

print 'Hello World'

set @i=@i+1

end

可使用break、continue关键字

}

if…else…

{

if 判断条件

begin

XXX

end

else if 判断条件

begin

XXX

end

else

begin

XXX

end

}

try…catch…

{

begin try

XX

end try

begin catch

XX

end catch

}

}


事务

{

语法

{

begin transaction/tran

declare @sum int=0

第一条语句

set @sum=@sum+@@error

第二条语句

set @sum=@sum+@@error

if @sum<>0

begin

rollback

end

else

begin

commit

end

}

适用场合:需要同时执行的一组操作(同时成功或同时失败)

特性:原子性、一致性、隔离性、持久性

事务提交方式

{

自动提交事务

{

数据库自动打开、回滚、提交事务

执行普通SQL语句时即为此模式

}

隐式事务

{

自动打开事务,需要手动回滚、提交

此模式默认关闭,使用set implicit_transactions on打开

}

显式事务:需要手动打开、回滚、提交事务

}

事务中可以有多个rollback和commit,但只会执行其中一个

}


存储过程

{

语法

{

创建

{

create proc usp_XXX 

[参数1[=默认值],

参数2[=默认值]]

as

begin

方法体

end

}

使用

{

exec 存储过程名 参数1,参数2

使用参数默认值时需要使用完整格式:

exec 存储过程名 变量2=参数2

}

输出参数

{

在存储过程参数声明末尾使用output关键字指定

需要使用变量接收:exec 存储过程名 参数1,变量1 output

}

}

作用:数据库中的方法/函数

优点

{

执行速度快(已编译)

允许模块化设计(代码复用)

提高系统安全性

减少网络流量

}

注意事项

{

创建存储过程的语句必须是批处理中的第一条

使用存储过程会增加数据库的压力,不应滥用

可通过传出参数判断操作是否成功

}

杂项

{

系统存储过程:sp_XX、xp_XX

获取存储过程代码:sp_helptext

SSMS操作:数据库->可编程性->存储过程

}

}


触发器(trigger)

{

语法

{

create trigger 触发器名 on 表名

after(for)/instead of [insert][,delete][,update]

as

begin

XXX

end

触发器中可以使用rollback和commit

不能向触发器传递参数

不能手动调用触发器 (事件触发时由系统自动调用)

}

触发器种类

{

After触发器:语句执行完毕后触发

Instead of触发器:语句执行前进行替换操作

}

inserted和deleted表

{

inserted表:临时存放插入的数据

deleted表:临时存放删除的数据

更新操作:同时使用inserted表和deleted表

}

触发器是一种特殊的存储过程

一条SQL语句只触发一次语句级触发器

尽量避免使用触发器

尽量避免在触发器中进行复杂耗时的操作

}