gpt4 book ai didi

sql - 将多个语句之间传递给存储过程

转载 作者:行者123 更新时间:2023-12-04 23:35:37 25 4
gpt4 key购买 nike

我有一张全是产品的表格,之前我们将 MaxPriceMinPrice 传递给存储过程,并选择价格介于两个值之间的产品。

但现在我想传递多个范围值,并希望选择价格在多个范围之间的产品。

假设我有一个这样的存储过程:

@PriceMin decimal(18, 4) = null,
@PriceMax decimal(18, 4) = null,

...
WHERE
product.Price > @PriceMin
AND product.Price < @PriceMax

但现在我想根据用户选择传递多个值范围并进行如下选择:

WHERE 
(product.Price > @PriceMin1 AND product.Price < @PriceMax1)
OR (product.Price > @PriceMin2 AND product.Price < @PriceMax2)
OR (product.Price > @PriceMin3 AND product.Price < @PriceMax3)
...

我该怎么做?

最佳答案

我假设您不知道要预先传递多少范围,所以我会使用表值参数将数据传递给存储过程。

第 1 步:创建 TVP

CREATE TYPE dbo.Ranges AS TABLE  
( PriceMin decimal(18, 4), PriceMax decimal(18, 4) )

第 2 步:修改您的存储过程参数列表和代码

ALTER PROCEDURE usp_selectBasedOnPrice   
(@rangeList dbo.Ranges READONLY)
BEGIN
..
-- from product
-- WHERE product.Price > @PriceMin and product.Price < @PriceMax

from product p JOIN @rangeList r
on p.Price BETWEEN r.PriceMin AND r.PriceMax
END

PS:请注意 BETWEEN优于><声明,在这种情况下,如果您的价格范围包含在内,即如果您确实需要 <= 和 >=;和 JOIN比多个 WHERE 好多了子句

请注意 BETWEEN 等同于 <= , >= 而不是 <, > 的简写

MS documentation on TVP

关于sql - 将多个语句之间传递给存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45116315/

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