gpt4 book ai didi

sql - 表值参数上的条件Where 语句?

转载 作者:行者123 更新时间:2023-12-02 11:14:14 26 4
gpt4 key购买 nike

我正在构建一个具有一堆可选参数的查询,其中一些是表值参数。我面临的问题是如何在此查询中最有效地使用 TVP?

每个 TVP 都有类型:

TABLE( [variable] nvarchar(30))

我知道我通常可以:

INNER JOIN @TVP

过滤掉 TVP 列表中没有的任何内容,但是如果我决定不在查询中向 TVP 传递任何值怎么办?那么什么都不会返回(因为内部连接)

通常这是通过条件 where 语句来完成的:

WHERE (SomeVar = @SameVar OR @SameVar IS NULL)

但是,对于 TVP,它不能为空(至少我没有发现)

我发现实现此目的的一种方法是:

OUTER APPLY
(SELECT TOP(1) * from dbo.SomeTable tbl where tbl.SomeVar in
(select * from @TVP) or not exists (select * from @TVP)
AND tbl.SomeVar = SomeVar)

不幸的是,这个方法非常慢

或者,我尝试过:

WHERE (tbl.SomeVar in (SELECT * FROM @TVP) or not exists (SELECT * from @TVP))

这快得多,但我仍然觉得它可能不太理想

任何帮助或想法将不胜感激!如果我可以澄清任何事情,请告诉我......提前致谢

编辑:

所以,我想出了这个,并且可能会使用它,除非有人有更好的解决方案:

INNER JOIN @TVP tvp
ON (tvp.SomeVar = tbl.SomeVar or tvp.SomeVar is null)

最佳答案

你尝试过吗:

   DECLARE @UseTVP int
SET @UseTVP = (SELECT COUNT(*) FROM @TVP)

SELECT TOP 1 *
FROM dbo.SomeTable tbl
LEFT JOIN @TVP tvp
ON tbl.SomeVar = tvp.SomeVar
WHERE (tvp.SomeVar IS NOT NULL
OR @UseTVP = 0)

关于sql - 表值参数上的条件Where 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3772491/

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