zoukankan      html  css  js  c++  java
  • SQL Server 存储过程的应用

    1、创建带 Try Catch 的存储过程模板

         Copy下面的代码,然后新建查询,就可以写sql语句,执行完后,一个你自己的存储过程就建立好了!

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- AUTHOR:
    -- DESCRIBE:
    -- =============================================
    CREATE PROCEDURE [dbo].[UP_InsertJHBData] --存储过程名
    @CustomerName VARCHAR(50) --参数
    AS 
        BEGIN    
            SET NOCOUNT ON                     --提高性能的,必须要有
            DECLARE @Now DATETIME
            SET @Now = GETDATE()               --所有操作保证统一时间
            
            BEGIN TRY 
            --在这里写SQL
            END TRY
            
            BEGIN CATCH    
                DECLARE @ErrorMessage NVARCHAR(4000) ;
                DECLARE @ErrorSeverity INT ;
                DECLARE @ErrorState INT ;
                       
                SELECT  @ErrorMessage = ERROR_MESSAGE() ,
                        @ErrorSeverity = ERROR_SEVERITY() ,
                        @ErrorState = ERROR_STATE() ;
                PRINT @ErrorMessage 
                RAISERROR(@ErrorMessage,  -- Message text.
                            @ErrorSeverity, -- Severity.
                            @ErrorState     -- State.
                            ) ;
                RETURN -1 ;
            END CATCH
        END

    2、创建带事务的存储过程模板

       将带 Try Catch 的存储过程的模板中加入了事务的控制

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- AUTHOR:
    -- DESCRIBE:
    -- =============================================
    CREATE PROCEDURE [dbo].[UP_InsertJHBData] --存储过程名@CustomerName VARCHAR(50) --参数
    AS 
        BEGIN   
            SET NOCOUNT ON ;--提高性能的,必须要有
            DECLARE @Now DATETIME ;
            SET @Now = GETDATE() ;--所有操作保证统一时间
           
            BEGIN TRY 
               BEGIN TRANSACTION myTrans ;--开始事务
               --在这里写SQL
               COMMIT TRANSACTION myTrans ;--事务提交语句
            END TRY
            
            BEGIN CATCH
                ROLLBACK TRANSACTION myTrans-- 始终回滚事务
                --抛出异常
                DECLARE @ErrorMessage NVARCHAR(4000) ;
                DECLARE @ErrorSeverity INT ;
                DECLARE @ErrorState INT ;
                SELECT  @ErrorMessage = ERROR_MESSAGE() ,
                        @ErrorSeverity = ERROR_SEVERITY() ,
                        @ErrorState = ERROR_STATE() ;
                RAISERROR(@ErrorMessage,  -- Message text.
                     @ErrorSeverity, -- Severity.
                     @ErrorState     -- State.
                     ) ;
            END CATCH
        END

     3、循环模板

      在存储过程中,经常会生成一些临时表,然后循环临时表的数据进行处理,以下模板可以帮助伙伴们快速处理此类需求

    --生成带行号的临时表数据,并插入临时表#T_Table中
        SELECT ROW_NUMBER() OVER (ORDER BY ID) AS RowNum,NAME 
        INTO #T_Table
        FROM TableName
        
        --获取记录总数
        DECLARE @RecordCount INT = 0    
        SELECT @RecordCount = COUNT(1) FROM #T_Table
                    
        DECLARE @CurrRowNum INT = 1        --当前行号
        DECLARE @CurrName VARCHAR(50)    --当前字段
        
        --循环记录            
        WHILE @CurrRowNum <= @RecordCount 
            BEGIN
                --获取当前记录
                SELECT @CurrName = Name FROM #T_Table WHERE RowNum = @CurrRowNum
                
                --自定义sql
                
                SET @CurrRowNum = @CurrRowNum + 1 --到下一条记录
            END
  • 相关阅读:
    [置顶] Guava学习之Lists
    Study notes for B-tree and R-tree
    uva 620 Cellular Structure
    [置顶] 程序员面试之道(《程序员面试笔试宝典》)之看着别人手拿大把的offer,不淡定了怎么办?
    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
    有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度
    C# 未能加载文件或程序集“MySQLDriverCS..." 错误解决
    LA 3942 Remember the Word(前缀树&树上DP)
    原根-快速求解一个数的原根
    线程初步了解
  • 原文地址:https://www.cnblogs.com/MuNet/p/5563411.html
Copyright © 2011-2022 走看看