句中为变量赋值
declare @sum int =18 --为变量赋初值
select @sum= SUM(english) from Score --查询语句中赋值
select @sum --输出变量值
--4、变量作为条件使用
declare @sname nvarchar(10)='张三'
declare @sage int
select @sage=sage from student where sName=@sname
select @sage
--5、使用print输出变量值,一次只能输出一个变量的值,输出为文本形式
print @sage
11、全局变量
--------------------------全局变量(系统变量)----------------------------------
select * from student0
select @@error --最后一个T-SQL错误的错误号
select @@max_connections--获取创建的同时连接的最大数目
select @@identity --返回最近一次插入的编号
12、事务
事务:同生共死
指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)–也就是由多个sql语句组成,必须作为一个整体执行
这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行
语法步骤:
开始事务:BEGIN TRANSACTION
事务提交:COMMIT TRANSACTION
事务回滚:ROLLBACK TRANSACTION
判断某条语句执行是否出错:
全局变量@@ERROR;
@@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;
---------------------------模拟转账----------------------------
declare @sumError int=0 --声明变量
begin tran
update bank set balance=balance-1000 where cId='0001'
set @sumError=@sumError+@@error
update bank set balance=balance+1000 where cId='0002'
set @sumError=@sumError+@@error
if (@sumError=0)
commit tran --提交成功,提交事务
else
rollback tran --提交失败,回滚事务
13、存储过程
存储过程—就像数据库中运行方法(函数)
和C#里的方法一样,由存储过程名/存储过程参数组成/可以有返回结果。
前面学的if else/while/变量/insert/select 等,都可以在存储过程中使用
优点:
执行速度更快 – 在数据库中保存的存储过程语句都是编译过的
允许模块化程序设计 – 类似方法的复用
提高
系统安全性 – 防止SQL注入
减少网络流通量 – 只要传输 存储过程的名称
系统存储过程
由系统定义,存放在master数据库中
名称以“sp_”开头或”xp_”开头
创建存储过程:
定义存储过程的语法
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
参数说明:
参数可选
参数分为输入参数、输出参数
输入参数允许有默认值
EXEC 过程名 [参数]
----------------------例--------------------------
if exists (select * from sys.objects where name='usp_GroupMainlist1')
drop proc usp_GroupMainlist1
go
create proc usp_GroupMainlist1
@pageIndex int, --页数
@pageSize int, --条数
@pageCount int output--输出共多少页
as
declare @count int --共多少条数据
select @count =count(*) from [mainlist] --获取此表的总条数
set @pageCount=ceiling(@count*1.0/@pageSize)
select * from
(select *,row_number() over(order by [date of booking] desc) as 'num' from [mainlist]) as t
where num between(@pageSize*(@pageIndex-1)+1) and @pageSize*@pageIndex
order by [date of booking] desc
-------------------------------------------------------------------------------------------
--调用
declare @page int
exec usp_GroupMainlist1 1,100,@page output
select @page
14、常用函数
1)ISNULL(expression,value) 如果expression不为null返回expression表达式的值,否则返回value的值
2)聚合函数
avg() -- 平均值 统计时注意null不会被统计,需要加上isnull(列名,0)
sum() -- 求和
count() -- 求行数
min() -- 求最小值
max() -- 求最大值
3)字符串操作函数
LEN() --计算字符串长度
LOWER() --转小写
UPPER () --大写
LTRIM() --字符串左侧的空格去掉
RTRIM () --字符串右侧的空格去掉
LTRIM(RTRIM(' bb '))
LEFT()、RIGHT() -- 截取取字符串
SUBSTRING(string,start_position,length)
-- 参数string为主字符串,start_position为子字符串在主字符串中的起始位置(从1开始),length为子字符串的最大长度。
SELECT SUBSTRING('abcdef111',2,3)
REPLACE(string,oldstr,newstr)
Convert(decimal(18,2),num)--保留两位小数
4)日期相关函数
GETDATE() --取得当前日期时间
DATEADD (datepart , number, date )--计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY, 3,date)为计算日期date的3天后的日期,而DATEADD(MONTH ,-8,date)为计算日期date的8个月之前的日期
DATEDIFF ( datepart , startdate , enddate ) --计算两个日期