现在的位置: 首页 > 综合 > 正文

SQL server 动态查询(表名或字段动态),并且获取想得到的返回值结果( exec sp_executesql )

2013年10月10日 ⁄ 综合 ⁄ 共 1042字 ⁄ 字号 评论关闭

   在编写sql语句或存储过程中,难免会有碰到语句中表名或某一字段名不确定,要根据条件来,这时,我们可考虑用SQL 提供的sp_executesql 函数,,他可执行动态的修改,删除,查询功能,至于此函数的详细解释可到sql帮助文档中去查看,下面我将举一个动态查询的列子,包括表名及想查询的字段均不确定:

tab:   
        (ID int)  (A numeric(9,2))  (B  numeric(9,2))  
       ===============================================
            1            20.30                33.12  
            2            34.32                22.66  
            3            45.54                99.19  
       ===============================================

完成任务:

  在不确定表名,及查询字段的情况下,根据传入的表名及字段及查询条件,获得对应返回结果:   
  1.seq条件   
  2.字段名称(A或B)  

  3.表名 
    
  要求函数返回值类型为numeric(9,2), 列如根据输入参数2取对应字段的值返回 

 

做法如下:

declare   @tab varchar(10), @rowname varchar(10) ,@seq int 
declare   @sql   Nvarchar(1000)

declare   @v numeric(9,2)  
set   @rowname='A'; 
set   @seq=2 ; 

set   @tab='tab'; 
   
set   @sql='select @a='+@rowname+' from '+@tab+' where id='+rtrim(@seq)  
exec  sp_executesql  @sql,N'@a numeric(9,2) output',@v output  
   
select @v

 

=============结果===========

34.32 

 

提醒:

 对于动态表名及字段使用非常简单,但获取结果使用动态语句是有一定规则的,如上面的列子,需要把表名声明成Nvarchar的,然后执行动态语句时,声明其动态语句中变量前也要加N ,如N'@a numeric(9,2) output'

 

抱歉!评论已关闭.