vacios - vacío en sql
Verificación simple para el resultado vacío de la consulta SELECCIONAR (10)
En mi función de información de uso sql
select FOUND_ROWS();
devolverá el no. de filas devueltas por la consulta de selección.
¿Alguien puede señalar cómo verificar si una consulta de selección devuelve un conjunto de resultados no vacío?
Por ejemplo, tengo la siguiente consulta:
SELECT * FROM service s WHERE s.service_id = ?;
¿Debo hacer algo como el siguiente?
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
para probar si el conjunto de resultados no está vacío?
Estoy de acuerdo con Ed B. Debes usar el método EXISTS, pero una forma más eficiente de hacerlo es:
IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
HTH
Para resumir las siguientes publicaciones un poco:
Si todo lo que le interesa es si al menos una fila coincidente está en la base de datos, entonces exists
uso exists
ya que es la forma más eficiente de verificar esto: se devolverá verdadero tan pronto como encuentre al menos una fila coincidente mientras que el count
, etc. todas las filas coincidentes.
Si realmente necesita utilizar los datos para el procesamiento o si la consulta tiene efectos secundarios, o si necesita saber el número total real de filas, entonces la comprobación de ROWCOUNT
o count
es probablemente la mejor forma de ROWCOUNT
.
Puedes hacerlo de varias maneras.
IF EXISTS(select * from ....)
begin
-- select * from ....
end
else
-- do something
O puede usar IF NOT EXISTS , @@ROW_COUNT
like
select * from ....
IF(@@ROW_COUNT>0)
begin
-- do something
end
Use @@ ROWCOUNT:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT > 0
-- do stuff here.....
De acuerdo con los Libros en pantalla de SQL Server :
Devuelve el número de filas afectadas por la última declaración. Si el número de filas es más de 2 mil millones, use ROWCOUNT_BIG.
tratar:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT=0
BEGIN
PRINT ''no rows!''
END
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
SELECT * FROM service s WHERE s.service_id = ?;
IF @@rowcount = 0
begin
select ''no data''
end
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
SELECT count(*) as count FROM service s WHERE s.service_id = ?;
prueba si count == 0.
Más barroco:
seleccionar caso cuando (SELECCIONAR conteo (*) como conteo FROM servicio s DONDE s.service_id =?) = 0 luego ''No filas, hermano!'' else ''¡Obtuviste datos! "final como stupid_message;