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语句只触发一次语句级触发器
尽量避免使用触发器
尽量避免在触发器中进行复杂耗时的操作
}