• Sql Server 存储过程使用技巧


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

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

    USE [DB]--设定对应的数据库
    GO
    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
    View Code

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

      只是将带Try。。。Catch的存储过程的模板中加入了事务的控制,使用类似

    USE [DB]
    GO
    
    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
    View Code

     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
    View Code
  • 相关阅读:
    Android Studio 开发
    Jsp编写的页面如何适应手机浏览器页面
    电影
    Oracle 拆分列为多行 Splitting string into multiple rows in Oracle
    sql server 2008 自动备份
    WINGIDE 激活失败
    python安装 错误 “User installations are disabled via policy on the machine”
    ble编程-外设发送数据到中心
    iOS开发-NSString去掉所有换行及空格
    ios9 字符串与UTF-8 互相转换
  • 原文地址:https://www.cnblogs.com/51net/p/4009138.html
Copyright © 2020-2023  润新知