1.局部变量
Declare @variable_name DataType
例:declare @name varchar(20)--声明存放姓名变量name,最多可以存储20个字符
2.给变量赋值
Set @variable_name = value
或
Select @variable_name=value
3.print语句和select语句
Print 局部变量或字符串
select 局部变量 as 自定义列名
例:
Print '服务器的名称:'+@@servername
Select @@servername as '服务器的名称'
4.数据类型转换(Cast()和Convert()函数)
Cast(表达式 as 数据类型)
Convert(数据类型[长度] ,长度[,样式])
例:
Cast(@Result as varchar(10))
Convert(varchar(20),@@error)
5.Begin-End语句
Begin
语句或语句块
End
6.IF-ELSE语句
IF(条件)
语句或语句块1
ELSE
语句或语句块2
7.WHILE语句
WHILE(条件)
Begin
语句或语句块
[break|continue]
End
8.CASE多分支语句
CASE
WHEN 条件1 THEN 结果1
WHEN 条件2 THEN 结果2
[ELSE 其他结果]
END
高级查询1.子查询
Select ........ From 表1 where 列1>(子查询)
例:
Select * from student where age>(select avg(age) from student)
2.IN 和 NOT IN子查询
3.EXISTS 和 NOT EXISTS子查询
4.使用UNION联合查询
事务、视图、索引、存储过程1.事务(Transaction)
a) 原子性:不可分割。
b) 一致性:当事务完成时,数据必须处于一致状态。
c) 隔离性:对数据进行修改的所有并发事务是彼此隔离的。
d) 持久性:不管系统是否发生了故障,事务处理的结果都是永久的。
语法:
Begin transaction --显示的标记一个事务的起始点
Commit transaction --这个语句标志一个事务成功结束。
Rollback transaction --将数据状态回滚到事务起始点,并释放由事务控制的资源。
例:
Use myschool
Go
Set nocount no --不显示受影响的行数
Print '查看转账事务前的余额'
Select * from bank
Go
--开始事务
Bengin transaction
Declare @errorNum=0
Update bank set currentMoney=currentMoney-1000 where customerName='张三'
Set @errorNum=@errorNum+@@error
Update bank set currentMoney=currentMoney+1000 where customerName='李四'
Set @errorNum=@errorNum+@@error
Print '查看转账事务过程中的余额'
Select * from bank
Go
--根据是否有错误,确定是提交还是撤销
If @@errorNum>0
Begin
Print '交易失败,回滚事务'
Rollback transaction
End
Else
Begin
Print '交易成功'
Commit transaction
End
Go
Print '查看转账事务后的余额'
Select * from bank
go
2.视图(View)
创建视图语法:
Create view view_name
As
<select 语句>
删除视图语法:
Drop view view_name
例:
If exists(select 1from sysobjects where name='vw_CardCostomer')
Drop view vw_CardCostomer
Go
--创建视图
create view vw_CardCostomer
as
select CardID 卡号, c.CustomerName 客户姓名, PassWord 密码, MoneyType 货币, bs.TypeName 储蓄种类,OpenCardDate 开户日期, OpenCardMoney 开户金额, case
when IsActive ='是' then '挂失'
when IsActive ='否' then '未挂失'
end 是否挂失
from BankCard b
inner join Customer c on c.CustomerID=b.CustomerID
inner join BankSaveGetType bs on bs.TypeID=b.SaveTypeID
Go
3.存储过程(procedure)
优点:
A)模块化程序设计
B)执行速度快,效率高
C)减少网络流量
D)具有良好的安全性
分类:系统存储过程(sp_)、用户自定义的存储过程(up_)
常用系统存储过程
A)Exec sp_databases --列出当前系统中的数据库
B)Exec sp_renamedb 'mybank','bank' --改变数据库名称
C)Exec sp_tables --当前数据库中可查询对象的列表
D)Exec sp_colums student --查看表student中列的信息
E)Exec sp_help student --查看student的所有信息
F)Exec sp_helpconstraint student --查看student表中的约束
G)Exec sp_helptext 'view_student_result' --查看视图的语句文本
H)Exec sp_stored_procedures --返回当前数据库中的存储过程列表
创建和删除存储过程
注:只要存储过程后面有output关键字,表示此参数为输入参数,否则视为输入参数,输入参数还可以设置为默认值。
语法:
Create proc[edure] 存储过程名
[
{@参数1 数据类型}[=默认值][output],
..................................................
{@参数n 数据类型}[=默认值][output]
]
As
SQL语句
例:
--存取钱存储过程
if exists(select 1 from sys.objects where name='up_ChangeMoney')
drop proc up_ChangeMoney
go
create proc up_ChangeMoney
@CardID varchar(32),
@ChangeDate datetime,
@ChangeMoney money,
@ChangeTypeName varchar(10),
@ChangeNote varchar(100)
as
begin tran
declare @ErrorSum int=0
declare @ChangeTypeID int
set @ChangeTypeID=(select TypeID from ChangeType where TypeName=@ChangeTypeName)
if (@ChangeTypeName='存入')
begin
print '交易正在进行中.....'
update BankCard set Banlance=Banlance+@ChangeMoney where CardID=@CardID
set @ErrorSum=@ErrorSum+@@error
insert into ChangeMsg values(@CardID,@ChangeDate,@ChangeMoney,@ChangeTypeID,@ChangeNote)
set @ErrorSum=@ErrorSum+@@error
end
else
begin
update BankCard set Banlance=Banlance-@ChangeMoney where CardID=@CardID
set @ErrorSum=@ErrorSum+@@error
if(@ErrorSum>0)
begin
RAISERROR ('交易失败!余额不足!',16,1)
end
Insert into ChangeMsg values(@CardID,@ChangeDate,@ChangeMoney,@ChangeTypeID,@ChangeNote)
set @ErrorSum=@ErrorSum+@@error
end
if(@errorSum=0)
begin
print @ChangeTypeName+'金额成功'
commit tran
end
else
begin
print '操作失败'
rollback tran
end
Go