Передать строку в SQL ГДЕ - PullRequest
       3

Передать строку в SQL ГДЕ

5 голосов
/ 04 августа 2011

Я работаю над страницей запроса, где пользователь выбирает значение, представляющее различные типы, каждый из которых идентифицируется идентификатором. Проблема заключается в выборе этих идентификаторов из базы данных с использованием метода WHERE IN.

Это мой оператор SQL

SELECT M.REG_NO, T.TYPE_ID 
    FROM MAIN AS M 
        INNER JOIN CLASSIFICATION AS C 
            ON M.REG_NO = C.REG_NO
        INNER JOIN TYPE AS T 
            ON T.TYPE_ID = C.TYPE_ID
    WHERE T.TYPE_ID IN (@Types)

это будет работать для одного значения, например. 46, но НЕ, если значение указано в скобках, например. (46) или ('46'), так и должно быть для IN.

Я использую Visual Studio, которая автоматически генерирует метод для доступа к адаптеру таблицы, чтобы получить значения, поэтому я думаю, что Я ДОЛЖЕН сделать это через SQL.

Я передаю строку, например. Types = "46,267,2010", в метод адаптера, который передает строку в @Types в инструкции SQL.

Любая помощь будет великолепна. Спасибо!

Ответы [ 3 ]

10 голосов
/ 04 августа 2011

Это довольно распространенная проблема - не уверен, почему TSQL еще не решил ее.В любом случае, решение, которое я нашел, лучше всего работает для меня - это преобразовать переменную в таблицу, и тогда вы можете использовать IN () для нее.*

А потом использовать функцию ...

SELECT * 
FROM table
WHERE SomeFieldValue In (Select ParsedString From dbo.ParseStringList(@Types))
5 голосов
/ 04 августа 2011

Это потому, что вам нужно иметь набор значений, разделенных запятыми.Например,

WHERE
T.TYPE_ID IN ('46', '45', '44');

Используете ли вы SQL Server или Oracle, MySQL?

Если у вас есть строка, состоящая из нескольких значений, например

T.TYPE_ID IN ('46,45,44');

Возможно, вам потребуетсяфункция, которая взорвет вашу строку, используя разделитель (разделенный или как он называется в зависимости от вашей СУБД)

1 голос
/ 28 сентября 2016

Следующее Select отлично работает у меня:

 SELECT M.REG_NO, T.TYPE_ID 
        FROM MAIN AS M 
            INNER JOIN CLASSIFICATION AS C 
                ON M.REG_NO = C.REG_NO
            INNER JOIN TYPE AS T 
                ON T.TYPE_ID = C.TYPE_ID
        WHERE (','+@Types+',') LIKE '%,' +T.TYPE_ID+ ',%'
...