--局部临时表:
--临时表的表名有一个前缀#
--临时表只对当前会话有效,只要将连接断开,再次打开则临时表就没有了。
--如果临时表是在存储过程中创建的,则当存储过程执行完毕,则自动销毁。类似于c#变量的作用域范围。
--
--全局临时表:
--前缀##
--多个会话中可以共享全局临时表
--只有创建该表的会话断开时才会删除全局临时表,如果这时,正有其他会话在访问该临时表,则会等待该会话结束后删除临时表。
create table #student
(
username nvarchar(10),
age int
)
create table ##quanjustudent
(
username nvarchar(10),
age int
)
--表变量
declare @T1 table(c1 int,c2 int);
insert into @t1 values(1,2)
select * from @t1
--在视图中的查询语句,必须为每一列建一个列名
create view vw1
as
select
tsname,
case
when tsage>50 then '豆蔻年华'
else '青壮年'
end as '外号'
from tblstudent
select * from vw1
--在视图中不能使用order by语句。除非:除非另外还指定了 TOP 或 FOR XML
--错误的写法
create view vw2
as
select * from tblstudent order by tsid desc
--正确的写法
create view vw2
as
select top 10 * from tblstudent order by tsid desc
--=======声明变量----
declare @name varchar(10)
declare @age int
set @name='abc'
set @age=1
print @name
print @age
declare @userAge int
-------------=使用set与select为变量赋值的区别============
--当使用set为变量赋值时,如果右边返回多个值,则“报错”。
set @userAge=(select tsage from TblStudent)
print @userAge
declare @userAge int
--当使用select为变量赋值时,如果右边返回多个值,则始终以最后一个为准
select top 5 @userAge=tsage from TblStudent
print @userAge
declare @age int
--一开始变量没有赋值的时候为null,null与任何类型计算得到的结果还是null
--所以和建议声明变量的时候一定要赋初值。
set @age=@age+1
select @age --所以这里输出还是null
----------事务--
begin tran
declare @sum int
update bank set salary=salary+1000 where id=1
set @sum+=@@error
update bank set salary=salary-1000 where id=2
set @sum+=@@error
if @sum<>0
begin
-- 回滚
rollback
end
else
begin
--提交
commit tran
end
--隐式事务
SET IMPLICIT_TRANSACTIONS ON
--关闭数据库的隐式提交
SET IMPLICIT_TRANSACTIONS OFF
------------存储过程-----------
---分页存储过程
create proc fenye
@size int,
@index int,
@total int output
as
select * from
(
select *, row_number() over(order by tsid) as number from tblstudent
)as T
where T.tsid between (@index-1)*@size+1 and @index*@size
select @total=count(1) from tblstudent
declare @cont int
exec fenye 2,2,@cont output
print @cont
--sql server中的触发器是表级触发器,无论删除多少行或者插入多少行,只触发一次。
--是按语句来触发的,每次执行一次语句,触发一次触发器。
--不会每一条语句都触发
create trigger tri_tblclass_insert_after
on tblclass after insert
as
declare @classid int
declare @classname varchar(20)
select @classid=tclassid,@classname=tclassname from tblclass
print @classid
print @classname
insert into tblclass values('你懂的','还能有啥哇')
--当使用instead of 触发器以后,原来的删除操作被替换成了:
--insert into TblClassBak select * from deleted
create trigger tri_TblClass_delete_instead_of
on TblClass instead of delete
as
begin
insert into TblClassBak
select * from deleted
end