Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程中的exec将获得存储过程的好处_Sql_Sql Server 2005_Stored Procedures_Execute - Fatal编程技术网

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注入攻击。