存储过程中的exec将获得存储过程的好处

时间:2011-10-04 06:54:52

标签: sql sql-server-2005 stored-procedures execute

如果我放了什么

DECLARE @Query VARCHAR(8000)

SET @Query = 'select * from  subscriber   
                where sbs_userid = ' + cast(@UserID as varchar) + '
          and SBS_Status in (select statusFlag from #tmpStatusFlag) 
          and SBS_SourceFlag  in (select sourceFlag from #tmpSourceFlag)' 

IF (@FirstName !='')
    SET @Query = @Query + ' and  SBS_FirstName like ''%' + @FirstName + '%'''
IF(@LastName !='')
   SET @Query = @Query + ' and  SBS_LastName like ''%' + @LastName + '%'''
IF(@Phone !='')
   SET @Query = @Query + ' and  SBS_WorkPhone like ''%' + @Phone + '%'''
IF(@EmaiAdderess !='')
   SET @Query = @Query + ' and  SBS_EmailAddress like ''%' + @EmaiAdderess + '%'''
 IF(@City !='')
   SET @Query = @Query + ' and  SBS_City like ''%' + @City + '%'''   
IF(@SubListId !='-1')
   SET @Query = @Query + ' and  SBS_SubListId like ''%' + @SubListId + '%'''


SET @Query = @Query + ' order by SBS_CreationDate desc'

EXEC (@Query)

在我的存储过程中。

我的问题仍然是我从存储过程中获益或是一种错误的方法

我从不使用此功能,但我的团队负责人使用此功能来加快存储过程。好吗?

EDITED

如果我们使用 sp_executesql 而不是 exec ,那么我们可以利用存储过程的好处。这是否正常?

1 个答案:

答案 0 :(得分:4)

没有

您需要使用EXEC sp_executesql来获得参数化的优势(计划重用 - 防止SQL注入)。

无论如何,这些领先的外卡搜索都会很昂贵。您是否考虑过全文索引?

编辑后

  

如果我们使用sp_executesql代替exec,那么我们可以获益   存储过程。这可以吗?

所有存储过程的好处。存储过程仍然会超过sp_executesql的一些优点是,您可以使用所有权链接,只需要对存储过程授予exec权限,而不是select对基础知识的权限对象。另外,使用静态存储过程而不是动态SQL字符串可以在重构数据库时更容易找到依赖对象。

但是在您的情况下,对于6个可选参数的每个存在/不存在组合,您将需要64个单独的过程,并且随着更多可选参数的添加,此数字会呈指数级增长。

有关此主题的详尽讨论,请参阅Dynamic Search Conditions in T-SQL Version for SQL 2005 and Earlier