Sql 存储过程中的exec将获得存储过程的好处
如果我放东西Sql 存储过程中的exec将获得存储过程的好处,sql,sql-server-2005,stored-procedures,execute,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
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)
在我的存储过程中
我的问题仍然是,我得到了存储过程的好处,还是这是一种错误的方法
我从未使用过它,但我的团队领导使用它来加速存储过程。可以吗
已编辑
如果我们使用sp\u executesql而不是exec,那么我们可以利用存储过程的优点。这样可以吗?否
您需要使用以获得参数化的优势(计划重用-防止SQL注入)
无论如何,这些领先的通配符搜索都会很昂贵。你考虑过全文索引吗
编辑之后
如果我们使用sp_executesql
而不是exec
,那么我们就可以从中获益
存储过程的。这样可以吗
并非存储过程的所有好处。存储过程仍然比sp_executesql
有两个优点,那就是您可以使用所有权链接,只需要对存储过程授予exec
权限,而不是对底层对象授予select
。此外,使用静态存储过程而不是动态SQL字符串可以使重构数据库时更容易找到依赖对象
但是,在您的情况下,对于6个可选参数的存在/不存在的每个组合,您将需要64个单独的过程,并且随着更多可选参数的添加,这个数字将呈指数增长
有关此主题的详细讨论,请参阅。目前看来,这很容易受到SQL注入攻击。