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
请问这个过程的效率如何,如所有的查询用这个过程(就是变换表名及列名参数),会有什么弊端?
------解决方案--------------------
不是,从你说的这样可以省去很多不同表名和列名查询建立多个过程的好处,你的意思是不是,建立一个存储过程,然后创建动态、组合式语句,然后再执行对吗?
如果是这样的语句,那基本上和一般的语句没区别,效率也不会高,因为动态语句,虽然用的是存储过程,但每次都会重新编译,那么存储过程的编译一次,多次运行的优势就没有了
------解决方案--------------------
灵活性和性能往往都是不可兼得,你要是连表名都要动态的话当然需要编译,这个是静态存储过程实现不到的功能,实际上没啥好比较的