Я использую инструкцию SELECT в T-SQL для таблицы, подобной этой:
SELECT DISTINCT name, location_id, application_id FROM apps
WHERE ((application_id is null) or (application_id = '4'))
AND ((location_id is null) or (location_id = '3'))
Кажется, это работает нормально при поиске одного application_id или location_id, но что, если я хочу запустить оператор для нескольких местоположений? Я хочу вернуть все результаты для неизвестного количества location_id и application_id. Например, если я хочу найти кого-то по адресу location_id 2, 3, 4, 5, но только с одним application_id. Как бы я это сделал?
Заранее спасибо!
РЕДАКТИРОВАТЬ: Я идиот! Я сделал так, чтобы это звучало легко, не давая вам всех подробностей. Все эти значения даны из таблицы. Пользователь должен будет выбрать идентификаторы из столбца в таблице, а не вставлять их. После небольшого исследования этой проблемы, я нашел страницу , которая, казалось, давала жизнеспособное решение.
CREATE FUNCTION iter$simple_intlist_to_tbl (@list nvarchar(MAX))
RETURNS @tbl TABLE (number int NOT NULL) AS
BEGIN
DECLARE @pos int,
@nextpos int,
@valuelen int
SELECT @pos = 0, @nextpos = 1
WHILE @nextpos > 0
BEGIN
SELECT @nextpos = charindex(',', @list, @pos + 1)
SELECT @valuelen = CASE WHEN @nextpos > 0
THEN @nextpos
ELSE len(@list) + 1
END - @pos - 1
INSERT @tbl (number)
VALUES (convert(int, substring(@list, @pos + 1, @valuelen)))
SELECT @pos = @nextpos
END
RETURN
END
Может ли кто-нибудь помочь мне усовершенствовать это, чтобы удовлетворить мои потребности? Извините, если мой вопрос не очень ясен, поскольку я изо всех сил пытаюсь справиться с этим самостоятельно.
РЕДАКТИРОВАТЬ 2: После небольшого прочтения этой темы мне кажется, что для этого мне нужна хранимая процедура. Кажется, мне нужен код вверху, но у меня проблемы с адаптацией к моим потребностям. Структура таблицы следующая:
application_id name location_id
------------------------------------------------------
1 Joe Blogs 34
2 John Smith 55
Согласно статье, на которую я только что ссылался:
"Правильный способ обращения с
Ситуация заключается в использовании функции, которая
распаковывает строку в таблицу. Вот
очень простая такая функция: "
Итак, мне кажется, что мне нужно распаковать эти значения в строку и передать их с помощью этой хранимой процедуры. Любая идея о том, как я могу заставить это работать?
РЕДАКТИРОВАТЬ 3: Мне удалось решить это с помощью charindex () и convert (), в то время как я установил их сверху. Спасибо за вашу помощь, и я снова прошу прощения за боль.