sqlserver中的rollback transaction要跟COMMIT TRAN成对存在吗?

小蜗牛的家2022-10-04 11:39:541条回答

sqlserver中的rollback transaction要跟COMMIT TRAN成对存在吗?
我这种结构写怎么报错了
EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配.上一计数 = 2,当前计数 = 3.
BEGIN TRAN tran1
SAVE TRAN tranpoint --保存事务点
SET @TRANCOUNT=@@TRANCOUNT
PRINT '进入子事务后全局@@TRANCOUNT:'+CAST(@TRANCOUNT AS VARCHAR(50))
begin try
IF (@OrderType='1')
BEGIN --1
IF @OrderStatus=4
BEGIN--2
IF asas=1
BEGIN--3
END--3
ELSE
BEGIN--3
print '失败,回滚事务.'
rollback transaction tranpoint
SET @TRANCOUNT=(select @@TRANCOUNT)
PRINT '回滚子事务后全局@@TRANCOUNT:'+CAST(@TRANCOUNT AS VARCHAR(50))
return -1
END--3
END--2-
ELSE
BEGIN--2
print '失败,回滚事务.'
rollback transaction tranpoint
SET @TRANCOUNT=(select @@TRANCOUNT)
PRINT '回滚子事务后全局@@TRANCOUNT:'+CAST(@TRANCOUNT AS VARCHAR(50))
return -1
END--2
END--1
----------提交事务------------------
end try
begin catch
/**根据是否有错误,确定事务是提交还是回滚*/
print '失败,回滚事务.'
rollback transaction tranpoint
SET @TRANCOUNT=(select @@TRANCOUNT)
PRINT '回滚子事务后全局@@TRANCOUNT:'+CAST(@TRANCOUNT AS VARCHAR(50))
return -1
end catch
print '成功,提交事务,写入硬盘'
commit transaction tran1
SET @TRANCOUNT=(select @@TRANCOUNT)
PRINT '提交子事务后全局@@TRANCOUNT:'+CAST(@TRANCOUNT AS VARCHAR(50))
return 1

已提交,审核后显示!提交回复

共1条回复
brettonwoods 共回答了19个问题 | 采纳率78.9%
ollback 是回滚事务,只要没有commit提交,还可以恢复之前的数据.commit是提交事务,你不提交事务,你之前所有更改的数据别人在查看是看不到只能看到之前的数据,commit提交以后,别人才可看到你更新后的数据
1年前

相关推荐

sqlserver查找几个表的,查出这几个表分别的总和
sqlserver查找几个表的,查出这几个表分别的总和
比如 a表 是下单
b表 是提现
c表 是充值
d表 是退款
他们里面都有时间列 (比如里面有好多数据,2009年的——2012年的数据) 只查2012年的数据
现在需要 查出这 a、b、c、d 这几个表里面 他们分别的总和
结果为 a:总数 b:总数 c:总数 d:总数(2012年里面的这四个表分别的总数)
例如:a:1000条 b:250条 c:650条 d:565条(这是最终的查询结果)
谁知道 怎么用sql语句查出来 这几个数据
603天天1年前1
和尚是人 共回答了15个问题 | 采纳率93.3%
SELECT COUNT(A.*) AZ,COUNT(B.*)BZ,COUNT(C.*)CZ,COUNT(D.*)DZ FROM A,B,C,D WHERE 条件
and 时间 between 2009 and 2012;
sqlserver查询数据库某个站点最后一次输入数据的最大值和最小值
sqlserver查询数据库某个站点最后一次输入数据的最大值和最小值
station表中有站点编码(stationbm),站点名称(stationname),站点编号(snum)
device表中有设备编码(devicebm),站点编号(snum与station snum对应),设备名称(devicename)
deviceTemper表中有设备编码(devicebm与device devicebm对应),温度(temvalue),时间(gtime),主键id(tid) 现在想查询出某个站点最后一条输入数据的最大温度和最小温度 本来sql已经写出 但是当数据一多查询时间就比较长 求教,
声声忘了声声难了1年前1
梧桐2 共回答了22个问题 | 采纳率90.9%
有点疑问啊.
deviceTemper表中有设备编码(devicebm与device devicebm对应),温度(temvalue),时间(gtime),主键id(tid)
现在想查询出某个站点最后一条输入数据的最大温度和最小温度
这个 deviceTemper表 只有一个 温度列啊.
如果是 最后一条输入数据,只有一条的话,那应该分不出 最大最小啊.
你是不是想查询 某个站点下面,所有设备 的 最后一条数据.
在多个设备的数据里面,找 最大与最小啊?
例如 站点 A,下面有 5个设备 A01,A02,A03,A04,A05
查询这5个设备的最后一条输入数据,然后在这5行里面,找个最大与最小?
sqlserver中 已知变量@id 为5位数,请问怎么取到@id的每一位数
sqlserver中 已知变量@id 为5位数,请问怎么取到@id的每一位数
(取到每一位数要进行对每一位数进行加减取余的操作获得新的数字)
uu之家1年前1
谷大飞 共回答了20个问题 | 采纳率80%

declare @str varchar(100),@a varchar(50),@b varchar(50),@c varchar(50),@d varchar(50),@e varchar(50)
set @str='12345'
set @a=left(@str,1)
set @b=substring(@str,2,1)
set @c=substring(@str,3,1)
set @d=substring(@str,4,1)
set @e=substring(@str,5,1)
print 'a='+@a
print 'b='+@b
prin t'c='+@c
print 'd='+@d
print 'e='+@e
这样每个数字获取到,可以进行后面的计算

在sqlserver中对某张表主键使用identity(自动增长)时,在对该张表再进行插入数据,数据插不了,且出现如
在sqlserver中对某张表主键使用identity(自动增长)时,在对该张表再进行插入数据,数据插不了,且出现如
“仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'T_admin'中的标识列指定显式值。”这是什么意思呀
弄石临溪1年前1
ygch68 共回答了24个问题 | 采纳率91.7%
在插入数据时,不要对主键赋值:
例如 表 A 中 有字段 F1,F2,F3 其中F1为自动增长,那么在SQL 应该为
Insert into A (F2,F3 ) values ('','')
F1会自动赋值
sqlserver 第一行减去第二行 以此为逻辑循环
sqlserver 第一行减去第二行 以此为逻辑循环
如表:abcd
a b
----------
5 2
2 3
5 4
要查询的的结果是
a b c
---------------
5 2 3 (规律3=5-2)
2 3 2 (规律2=3+2-3)
5 4 7 (规律7=2+5-4)
求详细的解答 本人sql语言基础不行
燃烧的冰快05121年前1
fthyfvy 共回答了17个问题 | 采纳率94.1%
数据取出来有没有排序关系?以下以id为排序字段
with t1(a,b,id) as (select 5,2,1 union all select 2,3,1 union all select 5,4,1),
t2(a,b,r) as (select a,b,row_number() over(order by id) from t1),
t3 as (select a,b,r,a-b c from t2 where r=1
union all select t2.a,t2.b,t2.r,t3.c+t2.a-t2.b from t3 join t2 on t2.r=t3.r+1)
select a,b,c from t3
SqlServer插入数据。将表A中的统计结果(3个)插入到表B中的某一行(3列),同时另2列的数据直接赋值。
SqlServer插入数据。将表A中的统计结果(3个)插入到表B中的某一行(3列),同时另2列的数据直接赋值。
同时向表B中插入一行数据。这一行数据中,有一部分列是直接赋值数据,而另一部分列的数据是经过查询(select)语句得出的满足条件的总计数目(查询语句3条)。
swh80221年前1
小傻11 共回答了11个问题 | 采纳率81.8%
使用一条sql语句的参考代码:
insert into 表2
select a.* f,b.直接赋值列1,直接赋值列2 from
(
select id ,count(*) 计算列,sum(xx) 计算列2
) a
inner join (
select id ,直接赋值列1,直接赋值列2 from 表
) b
on a.id=b.id
SQLSERVER 里的 DECIMAL(5,2)
bibibeibei1年前1
btwty111 共回答了19个问题 | 采纳率78.9%
类型 XXXXX.YY

decimal(18,2) 就是 .前面最多18位 后面最多2位