---------------------------------------------------------------------------------------------------------
--可编程对象(基于T-SQL编程)
---------------------------------------------------------------------------------------------------------
--变量
--批处理
--流程控制元素
--游标
--临时表
--动态SQL
--例程
--用户自定义函数
--存储过程
--触发器
---------------------------------------------------------------------------------------------------------
--基于T-SQL编程(变量\批处理\流程控制元素)
---------------------------------------------------------------------------------------------------------
--声明变量,使用变量,调用函数,做逻辑判断和循环处理
--声明变量
declare @变量名 类型名;
set @变量名=值;
select @变量名;
---------------------------------
if 返回true或false的表达式
begin
内容
end
--------------------------------
while(true)
begin
内容
end
----------------------------------
--例子
--求100以内的数的和
declare @sum int;
declare @i int;
set @sum=0;
set @i=0;
while @i<=100
begin
set @sum=@sum+@i;
set @i=@i+1;
end
select @sum
--------------------------
--求100以内所有偶数的和
declare @sum int;
declare @i int;
set @sum=0;
set @i=0;
while @i<=100
begin
if @i%2=0
begin
set @sum=@sum+@i;
end
set @i=@i+1;
end
select @sum
---------------------------------------------------------------------------------------------------------
--存储过程
--优势:省去解析的过程
--劣势:业务逻辑放到了数据库,不符合分层,维护混乱,无法使用集群(因为存储过程放在了sql实例中了)
---------------------------------------------------------------------------------------------------------
--存储在数据库中的一步一步执行的SQL语句
--执行系统的存储过程
exec sp_databases
.......
--不带参数的存储过程
--------------------
go
create proc u_存储过程名 --修改用alter
as
begin
--内容
select * from test1..vw_SpiltPage;
end
go
--执行存储过程
exec u_存储过程名
--带有参数的存储过程
---------------------
--带有默认参数的存储过程
---------------------
--带有返回值的存储过程
---------------------
go
create proc usp_bankTransfer
@FromAccount char(4),
@ToAccount char(4),
@Money money,
@res int output
as
begin
begin transaction
begin try
update tbBank set balance=balance - @Money where cid=@FromAccount
update tbBank set balance=balance + @Money where cid=@ToAccount
commit
set @res=1;
end try
begin catch
rollback
set @res=0;
end catch
end
---------------------------------------------------------------------------------------------------------
--触发器
---------------------------------------------------------------------------------------------------------
--定义:是一个特殊的存储过程,一般处理备份方面的事务。
--分两种:
instead of 触发器 --触发某个事件,其实是执行另外一件事,即被其它事务取而代之
after 触发器 --
--针对什么操作进行触发? 一般是用在增、删、改
---------------------------------------------------------
--after触发器
create trigger tr_update|delete|insert_触发器名称 on 表名
for|instead of |after
delete|update|insert
as
begin
--SQL语句
end
--可编程对象(基于T-SQL编程)
---------------------------------------------------------------------------------------------------------
--变量
--批处理
--流程控制元素
--游标
--临时表
--动态SQL
--例程
--用户自定义函数
--存储过程
--触发器
---------------------------------------------------------------------------------------------------------
--基于T-SQL编程(变量\批处理\流程控制元素)
---------------------------------------------------------------------------------------------------------
--声明变量,使用变量,调用函数,做逻辑判断和循环处理
--声明变量
declare @变量名 类型名;
set @变量名=值;
select @变量名;
---------------------------------
if 返回true或false的表达式
begin
内容
end
--------------------------------
while(true)
begin
内容
end
----------------------------------
--例子
--求100以内的数的和
declare @sum int;
declare @i int;
set @sum=0;
set @i=0;
while @i<=100
begin
set @sum=@sum+@i;
set @i=@i+1;
end
select @sum
--------------------------
--求100以内所有偶数的和
declare @sum int;
declare @i int;
set @sum=0;
set @i=0;
while @i<=100
begin
if @i%2=0
begin
set @sum=@sum+@i;
end
set @i=@i+1;
end
select @sum
---------------------------------------------------------------------------------------------------------
--存储过程
--优势:省去解析的过程
--劣势:业务逻辑放到了数据库,不符合分层,维护混乱,无法使用集群(因为存储过程放在了sql实例中了)
---------------------------------------------------------------------------------------------------------
--存储在数据库中的一步一步执行的SQL语句
--执行系统的存储过程
exec sp_databases
.......
--不带参数的存储过程
--------------------
go
create proc u_存储过程名 --修改用alter
as
begin
--内容
select * from test1..vw_SpiltPage;
end
go
--执行存储过程
exec u_存储过程名
--带有参数的存储过程
---------------------
--带有默认参数的存储过程
---------------------
--带有返回值的存储过程
---------------------
go
create proc usp_bankTransfer
@FromAccount char(4),
@ToAccount char(4),
@Money money,
@res int output
as
begin
begin transaction
begin try
update tbBank set balance=balance - @Money where cid=@FromAccount
update tbBank set balance=balance + @Money where cid=@ToAccount
commit
set @res=1;
end try
begin catch
rollback
set @res=0;
end catch
end
---------------------------------------------------------------------------------------------------------
--触发器
---------------------------------------------------------------------------------------------------------
--定义:是一个特殊的存储过程,一般处理备份方面的事务。
--分两种:
instead of 触发器 --触发某个事件,其实是执行另外一件事,即被其它事务取而代之
after 触发器 --
--针对什么操作进行触发? 一般是用在增、删、改
---------------------------------------------------------
--after触发器
create trigger tr_update|delete|insert_触发器名称 on 表名
for|instead of |after
delete|update|insert
as
begin
--SQL语句
end