estoy usando una instrucción SELECT en T-SQL en una tabla similar a la siguiente:SQL: Los valores de uso múltiples en una sola instrucción SELECT
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'))
Esto parece funcionar bien en la búsqueda de uno o uno application_id location_id , pero ¿y si quiero ejecutar la declaración para múltiples ubicaciones? Deseo devolver todos los resultados por una cantidad desconocida de location_id y application_id. Por ejemplo, si quería buscar a alguien en location_id's 2, 3, 4, 5 pero con solo un application_id. ¿Cómo haría esto?
¡Gracias de antemano!
EDIT: que soy un idiota! Lo hice sonar fácil sin darte todos los detalles. Todos estos valores se dan desde el interior de una tabla. El usuario deberá elegir los ID de una columna en la tabla en lugar de insertarlos. Después de hacer un poco de investigación sobre este problema, yo came up with a page que parecía proponer una solución viable.
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
¿Alguien me puede ayudar a perfeccionar esto para satisfacer mis necesidades? Lo siento si mi pregunta no es muy clara, ya que estoy luchando para entenderlo.
EDIT 2: Después de hacer un poco más de lectura sobre el tema parece que necesito un procedimiento almacenado para hacer esto. El código arriba parece ser lo que necesito, pero tengo problemas para adaptarlo a mis necesidades. La estructura de la tabla es la siguiente:
application_id name location_id
------------------------------------------------------
1 Joe Blogs 34
2 John Smith 55
De acuerdo con el artículo que acabo vinculado a:
"La forma correcta de manejar la situación es utilizar una función que desempaqueta la cadena . a continuación, en una tabla es un ejemplo muy simple función:"
por lo tanto, parece que necesito para descomprimir estos valores en una cadena y pasarlas por el uso de este procedimiento almacenado edure. ¿Alguna idea sobre cómo puedo hacer que esto funcione?
EDIT 3: He logrado resolverlo usando charindex() y convert(), mientras los configuro en la parte superior. Gracias por toda su ayuda y me disculpo nuevamente por ser un dolor.
Al publicar la definición de la tabla y algunas filas de ejemplo, las consultas y las respuestas esperadas mejorarían la calidad de las respuestas. – Andomar
Disculpas por no dar una explicación completa, solo estoy experimentando un par de dificultades técnicas mientras estoy trabajando mi cerebro con este problema. –
Aún no está claro cuál es el problema. ¿El problema es que no puedes hacer lo que quieres hacer (por qué no puedes simplemente crear la instrucción IN en el código de la entrada del usuario?) O ¿te preocupan los problemas de seguridad que plantea el artículo vinculado? Solo me preocuparía esto último si se trata de una aplicación que se encuentra en Internet. –