Как выбрать между параметрами SQL на основе параметра, отправленного из C # - PullRequest
0 голосов
/ 25 марта 2019

Я застрял, пытаясь найти решение этой проблемы, может быть, кто-то может помочь?

На основании параметра int, отправленного из C #, параметр, используемый в нашем запросе, должен измениться. Псевдокод:

DECLARE @parameterFromC# int = 1

DECLARE @city1 nvarchar = 'London'
DECLARE @city2 nvarchar = 'Paris'
DECLARE @city3 nvarchar = 'New York'

DECLARE @mainParameter nvarchar

SELECT * from Customers
WHERE City = @mainParameter

Когда @ parameterFromC # равно 1, @mainParameter должен быть = @ city1,
когда @ parameterFromC # равно 2, @mainParameter должен быть = @ city2 и т. д.

Мое решение состояло в том, чтобы сделать @ parameterFromC # nvarchar, отправить число в виде строки и затем объединить его с @city. В псевдокоде это было примерно так:

@ mainParameter = '@city' + @ parameterFromC #

Мне сказали, что это небезопасно и найти какой-то другой способ.

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Другой и, возможно, более читаемый способ может заключаться в том, чтобы отделить логику для определения значения параметра sql от фактического использования параметра sql.Весьма вероятно, что прирост производительности не будет потерян, компилятор sql очень умен.

DECLARE @parameterFromC int = 1

DECLARE @city1 nvarchar = 'London'
DECLARE @city2 nvarchar = 'Paris'
DECLARE @city3 nvarchar = 'New York'

DECLARE @mainParameter nvarchar

SET @mainParameter = CASE
  WHEN @parameterFromC = 1 THEN @city1
  WHEN @parameterFromC = 2 THEN @city2
  ELSE @city3
END

SELECT * from Customers
WHERE City = @mainParameter
2 голосов
/ 25 марта 2019

Я согласен с Ларну - я думаю, что вы должны пройти в городе через C #, однако я не знаю ваших обстоятельств. Вы должны быть в состоянии использовать CASE/WHEN.

SET @mainParameter=CASE 
               WHEN @parameterFromC=1 THEN @city1 
               WHEN @parameterFromC=2 THEN @city2
               ELSE @city3
             END

Используйте эту строку после объявления переменной и перед выбором на Customers table.

Вам не обязательно нужен @mainParameter. Вы можете использовать CASE/WHEN в предложении where.

SELECT * 
FROM Customers
WHERE City = CASE 
               WHEN @parameterFromC=1 THEN @city1 
               WHEN @parameterFromC=2 THEN @city2
               ELSE @city3
             END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...