gpt4 book ai didi

sql - 在存储过程中执行将获得存储过程的好处

转载 作者:行者123 更新时间:2023-12-04 20:17:54 25 4
gpt4 key购买 nike

如果我放东西

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_executesql 而不是 exec 那么我们可以利用存储过程的好处。这样可以吗?

最佳答案

没有。

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

无论如何,这些领先的通配符搜索都将非常昂贵。您是否考虑过全文索引?

修改后

If we use sp_executesql instead of exec then we can take the benefits of stored procedure.and is this ok with this ?

不是所有存储过程的好处。与 sp_executesql 相比,存储过程还有一些优势,那就是您可以使用所有权链,并且只需要授予对存储过程的 exec 权限,而不是 select 底层对象。此外,使用静态存储过程而不是动态 SQL 字符串可以在重构数据库时更轻松地找到相关对象。

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

参见 Dynamic Search Conditions in T-SQL Version for SQL 2005 and Earlier以获得对该主题的深入讨论。

关于sql - 在存储过程中执行将获得存储过程的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7644242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com