在MSSQL规范中,支持事务嵌套,不过在嵌套调用子存储过程时,要回滚事务,需把@@error传给最外层事务。举例如下:
drop table testtb
go
create table testtb
(
id int,name varchar(2)
)
go
--子过程
drop proc proc_insert_sub
go
create proc proc_insert_sub
@errResult int out--返回错误值
as begin
declare @errsum int
declare @transname varchar(20)
set @transname='subtran'
set @errsum=0
--正确数据
insert testtb values(1,'00')
set @errsum=@errsum+@@error
--错误数据
insert testtb values(2,'222')
set @errsum=@errsum+@@error
--正确数据
insert testtb values(1,'11')
set @errsum=@errsum+@@error
set @errResult=@errsum
end
go
--主过程
drop proc proc_insert
go
create proc proc_insert
as begin
declare @errsum int
declare @errsum1 int
set @errsum=0
set @errsum1=0
begin tran
exec proc_insert_sub @errsum1 out
print @errsum1
set @er ......
注:本篇只是记录所碰到的问题。
最近对程序做了一些性能上的优化,集中在sql上。发现了一个问题。
同一个语句,如果搜索的范围小,系统自动使用index。如果搜索的范围大,系统不知道为什么放弃使用index。改用scan table。
这样很影响性能。造成的原因不是很清楚。如果知道朋友可以留言给我,指教一下。
为了解决这个问题,我只有在sql语句上强制使用某的index。 例子如下
Select ..... from products with (index(indexname)) where ..... ......