zoukankan      html  css  js  c++  java
  • sp_executesql返回多个输出参数

    参考下面sp_executesql单个输出参数,@I变量为动态列名,列名后缀n或是c,为了比较更新前后值是否发生了变化,分别做了两次SELECT取值,程代码冗余和产生不容忽视性能的问题。:

    View Code
                    SET @sql = N'SELECT @N = ['+ CONVERT(NVARCHAR(MAX),@I+'n] FROM #inserted'
                    EXECUTE sp_executesql @sql,
                                          N'@N DECIMAL(18,0) OUTPUT',
                                          @Nn OUTPUT;
                    SET @sql = N'SELECT @O = ['+ CONVERT(NVARCHAR(MAX),@I+'n] FROM #deleted'        
                    EXECUTE sp_executesql @sql,
                                          N'@O DECIMAL(18,0) OUTPUT',
                                          @On OUTPUT;    
                    IF (ISNULL(@Nn,0<> ISNULL(@On,0))                
                        --EXECUTE [dbo].[usp_Audit_Insert] ...                           
                
                    
                    SET @sql = N'SELECT @N = ['+ CONVERT(NVARCHAR(MAX),@I+'c] FROM #inserted'
                    EXECUTE sp_executesql @sql,
                                          N'@N DECIMAL(18,0) OUTPUT',
                                          @Nc OUTPUT;
                    SET @sql = N'SELECT @O = ['+ CONVERT(NVARCHAR(MAX),@I+'c] FROM #deleted'        
                    EXECUTE sp_executesql @sql,
                                          N'@O DECIMAL(18,0) OUTPUT',
                                          @Oc OUTPUT;    
                    IF (ISNULL(@Nc,0<> ISNULL(@Oc,0))                
                        --EXECUTE [dbo].[usp_Audit_Insert] ...

    sp_executesql可以实现返回多个输出参数,改进代码:

    View Code
    DECLARE @sql NVARCHAR(MAX),@FName NVARCHAR(50)
                    DECLARE @Nn DECIMAL(18,0),@On DECIMAL(18,0),@Nc DECIMAL(18,0),@Oc DECIMAL(18,0)    
                                    
                    SET @sql = N'SELECT @Nn = ['+ CONVERT(NVARCHAR(MAX),@I+'n],@Nc = ['+ CONVERT(NVARCHAR(MAX),@I+'c] FROM #inserted'
                    EXECUTE sp_executesql @sql,
                                          N'@Nn DECIMAL(18,0) OUTPUT,@Nc DECIMAL(18,0) OUTPUT',
                                          @Nn OUTPUT,@Nc OUTPUT;                                      
                                          
                    SET @sql = N'SELECT @On = ['+ CONVERT(NVARCHAR(MAX),@I+'n],@Oc = ['+ CONVERT(NVARCHAR(MAX),@I+'c] FROM #deleted'        
                    EXECUTE sp_executesql @sql,
                                          N'@On DECIMAL(18,0) OUTPUT,@Oc DECIMAL(18,0) OUTPUT',
                                          @On OUTPUT,@Oc OUTPUT;
                                              
                    IF (ISNULL(@Nn,0<> ISNULL(@On,0))
                        --EXECUTE [dbo].[usp_Audit_Insert] ...
                                    
                    IF (ISNULL(@Nc,0<> ISNULL(@Oc,0))
                        --EXECUTE [dbo].[usp_Audit_Insert] ...

     更多相关:

    http://www.cnblogs.com/insus/archive/2012/01/18/2325299.html

  • 相关阅读:
    mvc 当中 [ValidateAntiForgeryToken] 的作用 转载https://www.cnblogs.com/hechunming/p/4647646.html
    ASP.NET MVC学习系列(一)-WebAPI初探
    ASP.NET MVC学习系列(二)-WebAPI请求 转载https://www.cnblogs.com/babycool/p/3922738.html
    MVC和WebApi 使用get和post 传递参数。 转载https://blog.csdn.net/qq373591361/article/details/51508806
    Web API与AJAX:理解FormBody和 FormUri的WebAPI中的属性
    webApi之FromUri和FromBody区别
    C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解 转载 https://www.cnblogs.com/landeanfen/p/5501487.html
    JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查
    PHP 生成唯一的激活码
    C++ virtual继承
  • 原文地址:https://www.cnblogs.com/insus/p/2325761.html
Copyright © 2011-2022 走看看