Сохраните одну переменную SQL Server в переменной, а затем используйте значения столбца для построения запроса. - PullRequest
5 голосов
/ 07 февраля 2012

У меня проблема с тем, что пользователь установил свои предпочтения в таблице.

В таблице более 5 столбцов.Теперь я хочу найти другое представление со значениями условий, которые находятся в таблице preference.

Пример:

Таблица Preference имеет price range, colour и т. Д.

Так что мне нужно искать товары по цене и цветам.

Теперь я хочу сделать это в самом SQL Server, т.е., передавая идентификатор предпочтения, он всегда будет возвращать одну строку, а затем из столбцовполучить такие значения, как min price, max price, а затем создать поисковый запрос.

Проблема в том, что я не знаю, как мне сохранить значения столбцов предпочтительной строки в переменных, чтобы я мог их использовать.

Я использую Entity Framework, так что я тоже не могу использовать Dynamic SQL.

Я только хочу знать, каким образом я могу хранить значения столбцов таблицы предпочтений.

  • Я только знаю, что могу сделать что-то вроде:

    @colour = Select Top 1 Colour from preferences;
    

Но вот так мне нужно написать этот запрос для каждой переменной.Есть ли какой-то лучший способ с тем, что называется CTE и т. Д.

Ответы [ 2 ]

17 голосов
/ 07 февраля 2012

Вы должны объявить переменные, затем вы можете использовать их для назначения значений в 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

Или вы можете сделать один запрос, если эти 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)
0 голосов
/ 15 мая 2015
DECLARE @A int, @B int

SELECT
  @A = Col1,
  @B = Col2
FROM SomeTable
WHERE ...

или

DECLARE @T TABLE (
  A int,
  B int
)
INSERT INTO @T ( A, B )
SELECT
  Col1,
  Col2
FROM SomeTable
WHERE ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...