准备
推荐工具:Navicat
前置技能:SQL server CURD 基础编程 触发器 事务 视图
案例
一个存储过程接口的案例,可以参考,有错误和不足之处请指出。
ALTER PROCEDURE [dbo].[adminPower_AllList]
@session varchar(30),
@ip varchar(30),
@rescode int = -1 output,
@resdesc varchar(200) = '' output //有output标记即为返回值,无output标记即为传入值
as
set xact_abort on //开启事务回滚,与begin tran/commit tran rollback tran是一套流程
begin try //try.....cache异常处理标准流程走一套
begin tran
RAISERROR ('错误',11,11); //SQL server内置抛出错误函数,可百度
declare @userid bigint=0 //定义变量operate_userid为bigint 赋值为0 变量类型为数据库数据类型
exec _admin_Check @session=@session,@ip=@ip,@operate_userid=@userid output
//执行其他存储过程,参数传进、传出,缺一不可
//@session=@session 前一个session是其他sp的形参,后一个session是当前存储过程的传入值。
//@operate_userid=@userid output 接收传出值
//这种等式写法可以避免传参错误,简化写法为:exec _admin_Check @session,@ip,@userid output
declare @sql nvarchar(max);
declare @SqlWhere nvarchar(max);
set @SqlWhere = 'where l.deleted = 0 and is_end=2 '; //设置参数
-- if @g_up_id is not null and @g_up_id<>0 and @g_up_id<>1 //--代表注释
-- -- 除默认用户组外,其余用户组只返回其对应项目下的权限列表
-- begin //相当于{}中{
-- set @SqlWhere = @SqlWhere + ' and l.up_id = ' + str(@g_up_id);
--
-- set @sql = '
-- select
-- l.*
-- from t_power l
-- '+@SqlWhere+'
-- order by p_id desc'
-- exec sp_executesql @sql //SQL server sql执行函数
-- end //相当于{}中}
-- else
-- -- 默认用户组返回所有权限
-- begin
-- set @sql = '
-- select
-- l.*
-- from t_power l
-- '+@SqlWhere+'
-- order by p_id desc'
-- exec sp_executesql @sql
-- end
set @rescode = 0;
set @resdesc = 'success';
commit tran
end try
begin catch
rollback tran
set @rescode = ERROR_NUMBER();//系统错误码
if @rescode=50000
set @rescode=error_State(); //单行代码可不加begin/end
set @resdesc = ERROR_MESSAGE();
select @rescode as rescode,@resdesc as resdesc
end catch