日期:2014-05-16  浏览次数:20404 次

请问组合式T语句的效率及弊端?
ALTER proc A_TT_CX3     
@tblName   varchar(255),       -- 表名
@strGetFields varchar(1000) = '*',  -- 需要返回的列  
@strWhere  varchar(1000) = '' -- 查询条件 (注意: 不要加 where)

as
declare @strSQL nvarchar(4000)      -- 主语句
set nocount on  --不返回记录行数
  begin

      if @strWhere !=''
      set @strSQL='select ' + @strGetFields +'  from ' + @tblName + ' Where '+ @strWhere
      Else
      set @strSQL='select '+ @strGetFields+'  from ' + @tblName
      End 
   
exec sp_executesql @strSQL


请问这个过程的效率如何,如所有的查询用这个过程(就是变换表名及列名参数),会有什么弊端?
------解决方案--------------------
引用:
各位版主所言是过程比单独的查询语句效率高,对于一个有多个这样查询需求的系统,使用一个过程传递不同的参数是可行的,这样可以省去很多不同表名和列名查询建立多个过程的好处,如此认为对否。


不是,从你说的这样可以省去很多不同表名和列名查询建立多个过程的好处,你的意思是不是,建立一个存储过程,然后创建动态、组合式语句,然后再执行对吗?

如果是这样的语句,那基本上和一般的语句没区别,效率也不会高,因为动态语句,虽然用的是存储过程,但每次都会重新编译,那么存储过程的编译一次,多次运行的优势就没有了
------解决方案--------------------
灵活性和性能往往都是不可兼得,你要是连表名都要动态的话当然需要编译,这个是静态存储过程实现不到的功能,实际上没啥好比较的