SQL高级应用

时间:2021-09-23 01:23:10

1、游标的使用
Selectdelete updateinsert into 表 selct*from

定义游标,让游标指向sql查询的结果
declare demoCursor Cursor for select 列名1,列名2,列名3 from 表名
open demoCursor
declare @UserName nvarchar(32)
declare @UserId int
declare @UserAge int

fetch next from demoCursor into
@UserName,
@UserName,
@UserName


close demoCursor
deallocate domeCursor--释放游标

2、视图
把一个查询结果作为虚拟表 提供给开发人员使用

create View VW_UserInfo as
select *from UserInfo where UserAge>40

视图的使用:
select*from VW_UserInfo 视图可以直接当表用

3、临时表

用#修饰临时表
crete table #testTb
(
Id int identity(1,1) primary key not null,
Name nvarchar(32) null

)
--临时表的使用和普通表一样。
select*from #TestTb

--临时表用完之后一定要:释放掉临时表
drop table #TestTb

临时表的用法:
select *into #Tb from Userinfo
select *from #Tb
drop table #Tb

临时表多用于高并发的情况的优化

数据库:锁概念
锁的级别:X:排它锁 S:共享锁

insert update delete 会在表上加 X
select 在表上添加 S锁。

多表连接:
select * from Employee as E
left join Position as P on E.PositionId = p.PositionId7

4、 sql异常处理
begin try
sql…
end try
begin catch
sql
end catch


5、事务

begin transaction 开启事务

conmit transaction 提交事务

rollback transaction 回滚事务

事务AdoNet实现:
SqlTransaction trans = conn.BeginTransaction();
注意:cmd.Transaction = trans;应该将事务对象初始化命令。

6、系统存储过程
exec sp_databases
exec sp_tables
exec sp_columns ‘UserInfo‘

动态执行SQL脚本:

declare @strSql nvarchar(max)
set @strSql =‘select * from UserInfo‘
exec (@strSql)