gpt4 book ai didi

performance - 忽略 T-SQL 中的 NULL 参数

转载 作者:行者123 更新时间:2023-12-03 10:53:52 27 4
gpt4 key购买 nike

我希望能够传入参数列表,并忽略那些为 NULL 的参数。这样查询实际上是假装过滤器不存在并忽略它。

我是这样做的:

(@thing IS NULL or Thing=@thing) 

这是正确的,如果是这样,它的表现会很差吗?它似乎比单独构建 SQL 慢很多。

这样做的最佳方法是什么?

固定的!请参阅 Marc Gravell 的回答。总之,多次使用 IS NULL 是一个很大的性能损失。

最佳答案

一旦你获得了其中的几个,那么是的:它开始变得非常缓慢。在这种情况下,我倾向于使用生成的 TSQL - 即

DECLARE @sql nvarchar(4000)
SET @sql = /* core query */

IF @name IS NOT NULL
SET @sql = @sql + ' AND foo.Name = @name'

IF @dob IS NOT NULL
SET @sql = @sql + ' AND foo.DOB = @dob'

// etc

EXEC sp_ExecuteSQL @sql, N'@name varchar(100), @dob datetime',
@name, @dob

等等

请注意, sp_ExecuteSQL 缓存查询计划,因此任何具有相同参数的查询都可能重复使用该计划。

缺点是除非您签署 SPROC,否则调用者需要对表具有 SELECT 权限(而不仅仅是对 SPROC 的 EXEC 权限)。

关于performance - 忽略 T-SQL 中的 NULL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/532468/

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