Estoy luchando con un procedimiento de T-SQL y espero que pueda ayudar.Procedimiento de T-SQL dando un resultado booleano
Necesito saber si
- Existe una fila de una tabla para un determinado ID
- Si uno (o más) no existe, entonces el más reciente ha puesto a otro ID 5.
Así que la primera tabla que necesitamos para sacar la fila tiene dos ID relevantes: CaseID y LocationID, ambos son enteros. La segunda tabla tiene 1 identificación relevante llamada StateID.
Actualmente puedo ver si la fila existe en una parte de la tabla, pero tan pronto como trato de hacer algo Enterprise Manager da un error de sintaxis antes de la instrucción END.
CREATE PROCEDURE [dbo].[HasActiveCase]
(
@LocationID INTEGER
)
AS
DECLARE @CaseID AS INTEGER
SELECT @CaseID=CaseID FROM dbo.Cases WHERE @LocationID=LocationID
SELECT CASE WHEN
@CaseID IS NULL
THEN
0
ELSE
-- do something here to check CaseEvents.StateID is not 5 (closed)
END
GO
Probablemente es una manera de conseguir lo que necesito en un JOIN o algo, pero yo soy un novato aquí.
¿Cuál sería la manera más fácil (de entender) de verificar el StateID no es 5 y devolver el resultado como verdadero/falso? (Sé que SQLServer no tiene un tipo booleano, pero sí tiene un tipo Bit.)
También en cuestión de estilo: los valores en los ID tienen un campo de texto asociado a ellos - CaseEvents.StateID has el texto 'Cerrado', por ejemplo. ¿Debo devolver los valores como los ID y luego reemplazar el ID en el código o devolver los objetos con los ID ya reemplazados con el texto? Nunca se devolverán más de 20 o 30 resultados en un conjunto y la tabla nunca será muy grande, ya que se necesitan 5 años para obtener 2000 resultados en ella.
NOTA: No se puede usar linq (o cualquier otra cosa .NETty) porque esto se llamará desde un programa VB6.
actualización:
Sólo 1 caso puede ser abierto a la vez por lo que sólo el artículo más reciente sería de relevancia.
Las posibles situaciones a tener es:
- Ningún caso nunca se abrió. Esto debería devolver 0.
- Se ha abierto anteriormente una caja, pero ahora está cerrada. Esto también debería devolver 0.
- Existe un caso abierto. Esto debería devolver 1.
En mi caso, solo puedes tener 1 maleta abierta en el momento, por lo que comprobar si el último elemento es un cierre será suficiente en esta instancia. Debo señalar esto en la descripción del problema. –
Lo siento, creo que debería haber sido más específico cuando dije "verifique si el último caso está cerrado": no es necesariamente el más reciente, el pedido no será específico a menos que incluya explícitamente una cláusula ORDER BY. –
La tuya fue la que salió directamente de la caja, por lo que obtienes el tic incluso si no es lo más fácil de entender. –