存储过程,类似于类,但又不太一样
他是把一个或者一组SQL语句只进行一次编译,后储存在服务器的数据库里,之后就可以直接通过调用名字了,执行特定的功能;1、减少了编译SQL的时间,提高了效率和2、代码的复用性和可移植性3、减轻服务器的负担4、可以更有效的管理数据库权限
缺点:专门维护他,占据数据空间
--即时生效,不具备原子性,不像事务, --创建一个带参数的储存过程 create proc addTest @Tname nvarchar(50), @age int as begin --SQL declare @time datetime--定义变量 select @time=getdate()--赋值 insert into test(Tname,age,datetime) values (@Tname,@age,@time) select * from test end --调用存储过程 exec addTest 'ty',6 exec selectTest use TestDB alter table test add datetime time --创建触发器 create trigger trigger_test on test for update as declare @id int,@name varchar(50),@age int--定义 select @id=id,@name=Tname,@age=age from deleted print '修改前:'+convert(varchar,@id)+','+@name+','+convert(varchar,@age); select @id=id,@name=Tname,@age=age from inserted print '修改后:'+convert(varchar,@id)+','+@name+','+convert(varchar,@age); --没有备份表则创建备份表 --select * into testInfo --from deleted --把deleted表里的数据(只有刚刚执行的数据)插入备份表 --insert into testInfo(Tname,age,datetime)select Tname,age,datetime from deleted delete from test where id=11 --先进行更改操作,触发触发器,触发器进行,把更改前的数据存入deleted,更改后的数据存入inserted --deleted,inserted,这两个表都是虚拟表,只读,当触发器结束后就这两个表就注销了,最后执行原本的更改操作。 update test set Tname='jhi',age=2 where id=9 alter trigger delete_test on test for delete as declare @id int,@name varchar(50),@age int select @id=id,@name=Tname,@age=age from deleted print('删除:')+convert(varchar,@id)+','+@name+','+convert(varchar,@age) if(object_id('testBackup','U')is not null)--‘U’对线类型是表 insert into testBackup select Tname,age,datetime from deleted--标识列不能显式插入标识列,所以这里不能插入id else select id,Tname,age,datetime into testBackup from deleted print'备份成功!' delete from test where id=23
本文来自博客园,作者:阿霖找BUG,转载请注明原文链接:https://www.cnblogs.com/lin-07/p/17350378.html