34,593
社区成员
发帖
与我相关
我的任务
分享
CREATE PROCEDURE [dbo].[UpdateMyInfo]
@Optype int,--0 新增 1修改 2删除
@No int,
@Name varchar(50)
AS
declare @Ret int
set @Ret=-1
if @Optype=0
begin
set xact_abort on
begin tran
insert into myinfo([Name]) values(@Name)
set @Ret=0
commit
end
return @Ret
CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
SELECT *
from #t
DROP TABLE #T
[/quote]
你好 我发现跟我启用出错中断标志有关
set xact_abort on
请问这是怎么回事[/quote]
这个选项开了就是出错就回滚,不管严重级别
set xact_abort on
CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
go
SELECT *
from #t
DROP TABLE #T
[/quote]
我在《查询分析器》下调用 确实没有执行后面的语句
declare @Ret int
exec @Ret=updatemyinfo 0,0,'信息'
print '123'
服务器: 消息 2627,级别 14,状态 1,过程 Updatemyinfo,行 13
违反了 PRIMARY KEY 约束 'PK_my_info'。不能在对象 'PK_my_info' 中插入重复键。
没有输出print '123'
的123[/quote]
你在存储过程中没有做异常处理
程序运行到存储过程哪里被打断了,相当于程序“走投五路”
加上异常处理的慢,即便是发生了异常,对于程序来说,他是有路可走的,不是不处理异常,造成程序“五无路可走”
你试试
alter PROCEDURE [dbo].[UpdateMyInfo]
@Optype int,--0 新增 1修改 2删除
@No int,
@Name varchar(50)
AS
declare @Ret int
set @Ret=-1
if @Optype=0
begin
set xact_abort on
begin try
begin tran
insert into myinfo([Name]) values(@Name)
set @Ret=0
commit
end try
begin catch
rollback
end catch
end
return @Ret
再来
declare @Ret int
exec @Ret=updatemyinfo 0,0,'信息'--传递一个插入不成功的参数
print '123'
--这个肯定可以走下来的
[/quote]
谢谢 sql2000不支持trycatch怎么办CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
SELECT *
from #t
DROP TABLE #T
[/quote]
你好 我发现跟我启用出错中断标志有关
set xact_abort on
请问这是怎么回事[/quote]
这个选项开了就是出错就回滚,不管严重级别
set xact_abort on
CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
go
SELECT *
from #t
DROP TABLE #T
[/quote]
我在《查询分析器》下调用 确实没有执行后面的语句
declare @Ret int
exec @Ret=updatemyinfo 0,0,'信息'
print '123'
服务器: 消息 2627,级别 14,状态 1,过程 Updatemyinfo,行 13
违反了 PRIMARY KEY 约束 'PK_my_info'。不能在对象 'PK_my_info' 中插入重复键。
没有输出print '123'
的123[/quote]
你在存储过程中没有做异常处理
程序运行到存储过程哪里被打断了,相当于程序“走投五路”
加上异常处理的慢,即便是发生了异常,对于程序来说,他是有路可走的,不是不处理异常,造成程序“五无路可走”
你试试
alter PROCEDURE [dbo].[UpdateMyInfo]
@Optype int,--0 新增 1修改 2删除
@No int,
@Name varchar(50)
AS
declare @Ret int
set @Ret=-1
if @Optype=0
begin
set xact_abort on
begin try
begin tran
insert into myinfo([Name]) values(@Name)
set @Ret=0
commit
end try
begin catch
rollback
end catch
end
return @Ret
再来
declare @Ret int
exec @Ret=updatemyinfo 0,0,'信息'--传递一个插入不成功的参数
print '123'
--这个肯定可以走下来的
CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
SELECT *
from #t
DROP TABLE #T
[/quote]
你好 我发现跟我启用出错中断标志有关
set xact_abort on
请问这是怎么回事[/quote]
这个选项开了就是出错就回滚,不管严重级别
set xact_abort on
CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
go
SELECT *
from #t
DROP TABLE #T
[/quote]
我在《查询分析器》下调用 确实没有执行后面的语句
declare @Ret int
exec @Ret=updatemyinfo 0,0,'信息'
print '123'
服务器: 消息 2627,级别 14,状态 1,过程 Updatemyinfo,行 13
违反了 PRIMARY KEY 约束 'PK_my_info'。不能在对象 'PK_my_info' 中插入重复键。
没有输出print '123'
的123CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
SELECT *
from #t
DROP TABLE #T
[/quote]
你好 我发现跟我启用出错中断标志有关
set xact_abort on
请问这是怎么回事[/quote]
这个选项开了就是出错就回滚,不管严重级别
set xact_abort on
CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
go
SELECT *
from #t
DROP TABLE #T
CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
SELECT *
from #t
DROP TABLE #T
[/quote]
你好 我发现跟我启用出错中断标志有关
set xact_abort on
请问这是怎么回事CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
SELECT *
from #t
DROP TABLE #T
[/quote]
你好 我发现跟我启用出错中断标志有关
set xact_abort on
请问这是怎么回事CREATE TABLE #T(ID INT)
BEGIN TRAN
insert into #t
select 2
INSERT INTO #T
SELECT 1/0
insert into #t
select 3
PRINT 'A'
COMMIT
SELECT *
from #t
DROP TABLE #T