sp_executesql返回多个输出参数

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

ExpandedBlockStart.gif 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可以实现返回多个输出参数,改进代码:

ExpandedBlockStart.gif 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值