如果我放了什么
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 ,那么我们可以利用存储过程的好处。这是否正常?
答案 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。