SQL中怎么退出IF语句,即出现报错不执行后面的语句
----检查是否存在存储过程sp_zwm_EnditSEOrder,如存在删除ifexists(select*fromsysobjectswhereid=object_i...
----检查是否存在存储过程 sp_zwm_EnditSEOrder,如存在删除
if exists (select * from sysobjects where id = object_id('sp_zwm_EnditSEOrder') and OBJECTPROPERTY(id,'IsProcedure') = 1)
drop procedure sp_zwm_EnditSEOrder
GO
----创建存储过程sp_zwm_EnditSEOrder
create proc sp_zwm_EnditSEOrder
@FbillnoNum varchar(50), --销售订单号
@Fcustid varchar(50) --客户名称内码
as
---定义字段
declare @icmo int,@Fentry int,@Fname int,@FnameOld varchar(50),@FStatus int ,@FChildren int,@Fclosed int
select @FbillnoNum=ltrim(isnull(@FbillnoNum, '')), @Fcustid=ltrim(isnull(@Fcustid, ''))
if @FbillnoNum not like 'HTSO%'
select [执行结果]='错误: [销售订单号]参数应该为HTSO开头!'
else if @Fcustid=''
select [执行结果]='错误: [新客户名称]参数不能为空!'
else
begin
---检查单据是否审核
select @Fentry=FInterID,@Fname=fcustid,@FStatus=FStatus,@FChildren=FChildren,@Fclosed=Fclosed from SEOrder where FBillNo =@FbillnoNum
if @@rowcount=0
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'修改客户名称执行失败,原因:1、单据不存在。'
if @FStatus = 0 --审核人字段为0 即未审核
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'修改客户名称执行失败,原因:2、单据未审核或单据已作废。'
if @FChildren <> 0 --关联标识字段为0即未关联
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'修改客户名称执行失败,原因:3、单据已有关联单据。'
if @Fclosed <> 0 --关闭标识字段为0 即未关闭
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'修改客户名称执行失败,原因:4、单据已关闭。'
---检查是否存在新客户
select @icmo=FitemID from t_organization where Fname=@Fcustid
if @@rowcount=0
select [执行结果]='错误: 新客户名称'+@Fcustid+'不存在!'
---查询旧客户名称
select @FnameOld=Fname from t_organization where FitemID=@Fname
---检查旧客户和新客户是否相同 、
if @Fname=@icmo
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'新客户名称['+@Fcustid+']和旧客户名称['+@FnameOld+']相同,无需修改。'
end
if isnull(@icmo, 0) = 0
return
-- 执行修改客户名称
update SEOrder set fcustid=@icmo where FInterID = @Fentry
-- 返回修改结果
if @@error=0
select [执行结果]='销售订单号'+@FbillnoNum+'客户名称由[ '+@FnameOld+'] 修改为 ['+@Fcustid+'],执行成功!'
else
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'更改客户出现异常!'
GO 展开
if exists (select * from sysobjects where id = object_id('sp_zwm_EnditSEOrder') and OBJECTPROPERTY(id,'IsProcedure') = 1)
drop procedure sp_zwm_EnditSEOrder
GO
----创建存储过程sp_zwm_EnditSEOrder
create proc sp_zwm_EnditSEOrder
@FbillnoNum varchar(50), --销售订单号
@Fcustid varchar(50) --客户名称内码
as
---定义字段
declare @icmo int,@Fentry int,@Fname int,@FnameOld varchar(50),@FStatus int ,@FChildren int,@Fclosed int
select @FbillnoNum=ltrim(isnull(@FbillnoNum, '')), @Fcustid=ltrim(isnull(@Fcustid, ''))
if @FbillnoNum not like 'HTSO%'
select [执行结果]='错误: [销售订单号]参数应该为HTSO开头!'
else if @Fcustid=''
select [执行结果]='错误: [新客户名称]参数不能为空!'
else
begin
---检查单据是否审核
select @Fentry=FInterID,@Fname=fcustid,@FStatus=FStatus,@FChildren=FChildren,@Fclosed=Fclosed from SEOrder where FBillNo =@FbillnoNum
if @@rowcount=0
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'修改客户名称执行失败,原因:1、单据不存在。'
if @FStatus = 0 --审核人字段为0 即未审核
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'修改客户名称执行失败,原因:2、单据未审核或单据已作废。'
if @FChildren <> 0 --关联标识字段为0即未关联
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'修改客户名称执行失败,原因:3、单据已有关联单据。'
if @Fclosed <> 0 --关闭标识字段为0 即未关闭
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'修改客户名称执行失败,原因:4、单据已关闭。'
---检查是否存在新客户
select @icmo=FitemID from t_organization where Fname=@Fcustid
if @@rowcount=0
select [执行结果]='错误: 新客户名称'+@Fcustid+'不存在!'
---查询旧客户名称
select @FnameOld=Fname from t_organization where FitemID=@Fname
---检查旧客户和新客户是否相同 、
if @Fname=@icmo
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'新客户名称['+@Fcustid+']和旧客户名称['+@FnameOld+']相同,无需修改。'
end
if isnull(@icmo, 0) = 0
return
-- 执行修改客户名称
update SEOrder set fcustid=@icmo where FInterID = @Fentry
-- 返回修改结果
if @@error=0
select [执行结果]='销售订单号'+@FbillnoNum+'客户名称由[ '+@FnameOld+'] 修改为 ['+@Fcustid+'],执行成功!'
else
select [执行结果]='错误: 销售订单号'+@FbillnoNum+'更改客户出现异常!'
GO 展开
2个回答
展开全部
if @FbillnoNum not like 'HTSO%'
begin
select [执行结果]='错误: [销售订单号]参数应该为HTSO开头!'
return --加个return 退出执行SQL
end
类似这样的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SQL临时没有执行过程中断的函数。
一般用if 时用 begin和end把语包起来。相当于C中的{}
if(判断)
begin
执行语句
end
else
begin
为假时,要执行的语句
end
SQL针对事务(transaction)是一个或多个接连在一起作为一个逻辑单位运行的SQL语句。DBMS认为事务是不可分割的,要么全部执行,要么全不执行。
begin transaction ---开始事务
commit transaction --提交事务
rollback transaction --错误时,回滚事务
参考:
http://blog.csdn.net/tianwailaibin/article/details/8004609
http://www.2cto.com/database/201208/146734.html
一般用if 时用 begin和end把语包起来。相当于C中的{}
if(判断)
begin
执行语句
end
else
begin
为假时,要执行的语句
end
SQL针对事务(transaction)是一个或多个接连在一起作为一个逻辑单位运行的SQL语句。DBMS认为事务是不可分割的,要么全部执行,要么全不执行。
begin transaction ---开始事务
commit transaction --提交事务
rollback transaction --错误时,回滚事务
参考:
http://blog.csdn.net/tianwailaibin/article/details/8004609
http://www.2cto.com/database/201208/146734.html
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询