Sql Server 存储过程使用技巧-阿里云开发者社区

开发者社区> 阿笨net> 正文

Sql Server 存储过程使用技巧

简介: 1、创建带Try。。。Catch的存储过程模板   Copy下面的代码,然后新建查询,就可以写sql语句,执行完后,一个你自己的存储过程就建立好了! USE [DB]--设定对应的数据库 GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER O...
+关注继续查看

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

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JDBC调用存储过程,以及存储过程 事务的使用.....
在JDBC中调用存储过程 首先就要在数据库中存在 要调用的过程  ,存储过程是一组SQL语句的集合,我们吧实现某一功能的 SQL语句集合在一起来使用,方便了用户,不光是这样,存储过程可以预编译,也就是说只要调用了一次存储过程,那么下次在调用存储过程的时候 就不需要进行再次编译了  。
821 0
SQLSERVER存储过程语法详解
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ]   [ WITH     { RECOMPILE | ENCRY
1426 0
SQL使用链接服务器执行远程数据库上的存储过程
原文:SQL使用链接服务器执行远程数据库上的存储过程   --创建链接服务器 exec sp_addlinkedserver'server_tmp','','SQLOLEDB','远程服务器名或ip地址' exec sp_addlinkedsrvlogin'server_tmp','fa...
1181 0
+关注
842
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载