MSSQL数据库嵌套存储过程的事务控制
在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 @errsum=@errsum+@errsum1
print @errsum
print @@trancount
if @errsum=0
commit tran
else
ROLLBACK TRANSACTION
end
go
/*执行
exec proc_insert
select * from testtb
*/
相关文档:
从mssql6.5开始,微软提供了两个不公开,非常有用的系统存储过程sp_MSforeachtable和sp_MSforeachdb,用于遍历某个数据库的每个表和遍历DBMS管理下的每个数据库。
我们在master数据库里执行下面的语句可以看到两个proc详细的代码
use master
exec sp_helptext sp_MSforeachtable
exec sp_helptext sp_Msforeachdb
sp_M ......
1.
--将汉字转换为拼音首字母
CREATE function GetAllPY(@str nvarchar(4000))
returns nvarchar(4000)
--WITH ENCRYPTION
as
begin
declare @intLen int
declare @strRet nvarchar(4000)
declare @temp nvarchar(100)
set @intLen &nb ......
Sql2005中使用ow_number() partition进行分组实验,
SQL:
select * from stu
select id,row_number() over (partition by snm order by id) from stu
结果:
id snm
----------------
111 111V
111 111W
222 222N
333 3123
444 3123
555 3123
666 3232
777 3232
--分组后的结果
id &n ......
最近有个小东西要查看mssql数据库是用php实现的,以前我用php5.2时感觉挺简单的所以想php5.3也应该很简单的
为什么要用php5.3呢因为我想用sqlite3.0的啊,因为php5.2的不支持sqlite3.0的啊,所以我特意去下了5.3了下载回来了才发现5.3里没有mssql的dll扩展了,郁闷啊,不管这么多先用起那sqlite3.0再说了
sqlite3.0的部分 ......
php教程 调用mssql存储过程实例应用
用mssql_init语句用于初始化存储过程,而后调用mssql_bind语句指定存储过程参数,最后调用mssql_execute执行存储过程。
*/
//连接mssql数据库教程服务器
$link = mssql_connect("127.0.0.1", "sa", "sa") or die("Can't connect sql server");
mssql_sele ......