gpt4 book ai didi

sql - 使用可选的存储过程参数

转载 作者:太空狗 更新时间:2023-10-30 01:58:39 26 4
gpt4 key购买 nike

我正在处理一个带有几个可选参数的存储过程。其中一些参数是单个值,很容易使用 WHERE 子句,例如:

WHERE (@parameter IS NULL OR column = @parameter)

但是,在某些情况下,WHERE 条件更为复杂:

WHERE (@NewGroupId IS NULL OR si.SiteId IN (SELECT gs.SiteId
FROM [UtilityWeb].[dbo].[GroupSites] AS gs
WHERE gs.GroupId = @NewGroupId))

当我取消注释这些复杂的 WHERE 子句时,查询执行时间加倍,执行计划变得非常复杂。虽然执行计划并不困扰我,但将查询的执行时间加倍是一个明确的问题。

其他人是否找到了在其存储过程中使用可选参数的最佳实践或模式?

这是动态 SQL 是更好解决方案的实例之一吗?

最佳答案

我会为参数是否可用创建单独的查询。

这会创建更简单的 SQL,并且优化器会做得更好。

像这样:

if (@parameter IS NULL) then begin
select * from foo
end
else begin
select * from foo where value = @parameter
end

在你有很多参数要像这样重新设计,并且你寻求动态 sql 解决方案,然后也总是使用参数,你可能会被 SQL-Injection 咬住错误。

也可以组合。最有可能使用的查询/您完整编码的查询,并进行预编译。所有其他组合都是动态创建的。

关于sql - 使用可选的存储过程参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/229622/

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