将单个sql server行存储在变量中,然后使用列值构造查询

Moo*_*ons 6 sql sql-server-2008

我有一个问题,用户在表中设置了他的首选项.

该表有超过5列.现在我想用preference表中的条件值搜索另一个视图.

例:

Preference表有price range,colour

所以我需要搜索价格和颜色的产品.

现在我想在SQL Server本身中执行它,即传递首选项id,它将始终返回单行,然后从列中获取值min price,max price然后创建搜索查询.

问题是我不知道如何将偏好行列值存储在变量中以便我可以使用它.

我正在使用实体框架,所以我也不能使用动态SQL.

我只想知道我可以存储首选项表的列值的方式.

但是像这样我需要为每个变量编写这个查询.是否有更好的方法称为CTE等.

Thi*_* Oo 17

您必须声明变量,然后您可以使用它们来分配值并在SELECT以后使用它们:

-- declare the variables
DECLARE @min_price decimal(8,2)
DECLARE @max_price decimal(8,2)
DECLARE @color varchar(20)

-- assign the values into the variables
SELECT 
    @min_price = MIN_PRICE
  , @max_price = MAX_PRICE
  , @color = Colour
FROM Preference
WHERE preference_id = (parameter of prefrence id)

-- Now you get all 3 values of Colour, Min Price, Max Price,
-- then these 3 values can be used for your query

SELECT *
FROM products 
WHERE colour = @color 
    AND price BETWEEN min_price AND @max_price
Run Code Online (Sandbox Code Playgroud)

或者,如果这些3个变量未在其他地方使用,您可以进行单个查询:

SELECT *
FROM products p
INNER JOIN
(
  SELECT Colour, MIN_PRICE, MAX_PRICE
  FROM Preference
  WHERE preference_id = (parameter of prefrence id)
) pre ON (p.colour = pre.Colour AND p.price BETWEEN pre.MIN_PRICE AND pre.MAX_PRICE)
Run Code Online (Sandbox Code Playgroud)