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)