SQL «SELECT IN (Value1, Value2 ...)» с передачей переменной значений в GridView - PullRequest
4 голосов
/ 05 декабря 2008

У меня странная встреча при создании GridView с использованием SELECT..WHERE..<field> IN (value1, val2...).

На вкладке «Настройка источника данных», если я жестко закодирую значения SELECT .... WHERE field1 in ('AAA', 'BBB', 'CCC'), система работает хорошо.

Однако, если я определю новый параметр и передам объединенную строку значений, используя переменную; будь то @session, Control или строка запроса; например SELECT .... WHERE field1 in @SESSION результат всегда пуст.

Я провел еще один эксперимент, сократив содержание параметра до единственного значения, оно хорошо работает.

короче, если я жестко закодирую строку значений, это работает, если я передаю переменную только с одним значением, это работает, но если я передам переменную с двумя значениями; это не удалось.

Просьба сообщить, если я допустил ошибку или это известная ошибка.

BR SDIGI

Ответы [ 3 ]

3 голосов
/ 01 октября 2012

Это работает. Не уверен, насколько это эффективно.

CREATE PROCEDURE [dbo].[get_bars_in_foo]
    @bars varchar(255)
AS
BEGIN
    DECLARE @query AS varchar(MAX)
    SET @query = 'SELECT * FROM [foo] WHERE bar IN (' + @bars + ')'
    exec(@query)
END

-- exec [get_bars_in_foo] '1,2,3,4'
1 голос
/ 05 декабря 2008

Посмотрите на ответ на этот вопрос (который очень похож на ваш)

Параметризация предложения SQL IN

Что в конечном итоге связывает (через запутанный маршрут) с этим окончательным ответом:

http://www.sommarskog.se/arrays-in-sql.html

0 голосов
/ 05 декабря 2008

Если вы переходите к использованию хранимой процедуры, вы можете использовать этот метод , который я обсуждал в отношении того, как сделать это в SQL.

...