SQL server 存储过程模板

存储过程直接套用模板、
流程控制、
执行日志、
根绝实际情况选择、

CREATE PROCEDURE [dbo].[procProcTemplete]
(
    @a INT, -- 入参
    @b INT OUTPUT --出参
)
AS
BEGIN
    SET NOCOUNT ON;

    --变量定义
    --计算过程执行时长
    DECLARE @starttime DATETIME
    DECLARE @totaltime INT
    --流程控制(成功失败)
    DECLARE @Result INT
    --执行影响行数
    DECLARE @ROW INT
    --错误日志
    DECLARE @ErrorMessage VARCHAR(1000)

    --变量赋值
    SET @starttime = GETDATE()
    SET @Result = 0

    --创建临时表
    CREATE TABLE #tmp_aa
    (Id INT,
     Value VARCHAR(50))

     --处理临时表数据
     INSERT INTO #tmp_aa
             ( Id, Value )
     VALUES  ( 0, -- Id - int
               'AAA'  -- Value - varchar(50)
               )

     --开启事务
     BEGIN TRAN
     BEGIN TRY

     --计算逻辑
     IF EXISTS(SELECT 1 FROM #tmp_aa
     WHERE Id = @a)
     BEGIN 

     SET @b = 1
     SET @Result = 0
     SET @ROW = @@ROWCOUNT

     END    
     ELSE 
     BEGIN 
     SET @Result = 1
     END

     --计算总时长
     SET @totaltime=datediff(second,@starttime,getdate());

     END TRY
     BEGIN CATCH

    IF @@TRANCOUNT > 0
    BEGIN
        ROLLBACK TRAN
    SELECT @ErrorMessage='操作发生异常:'+CAST(ERROR_NUMBER() AS VARCHAR)+','+ERROR_MESSAGE(),@Result = -1
    END

    END CATCH

    IF @@TRANCOUNT > 0 AND @Result = 0
    BEGIN
        COMMIT TRAN;
    END

    IF @@TRANCOUNT > 0 AND @Result <> 0
    BEGIN
        ROLLBACK TRAN;
    END

    --SELECT @b AS b;

    --删除临时表
    IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmp_aa'))
    BEGIN
    DROP TABLE #tmp_aa
    END

    --记录日志
    INSERT INTO tb_SYSLOGS(Logger,Logtime,LogIP,Logname,LogTotalTime,LevelCode,Message,LogSQL)
    SELECT 'Templete',GETDATE(),'::1','sa',@totaltime,'procProcTemplete','','影响行数' + CAST(@ROW AS VARCHAR(10)) + ',' + @ErrorMessage;

    END

猜你喜欢

转载自blog.csdn.net/zhangyongze_z/article/details/80987369