una truncar right rellenar promedio extraer espacios ejemplo derecha con cast caracteres cadena sql-server tsql aggregate variable-assignment

sql-server - truncar - substring sql



Guardar un valor de conteo seleccionado(*) en un entero(SQL Server) (4)

Si @myInt es cero, significa que no hay filas en la tabla: sería NULL si nunca se estableciera.

COUNT siempre devolverá una fila, incluso si no hay filas en una tabla.

Edición, abril de 2012: las reglas para esto se describen en mi respuesta aquí: ¿COUNT (*) siempre devuelve un resultado?

Tu conteo / asignación es correcto pero podría ser de cualquier manera:

select @myInt = COUNT(*) from myTable set @myInt = (select COUNT(*) from myTable)

Sin embargo, si solo está buscando la existencia de filas, (NO) EXISTS es más eficiente:

IF NOT EXISTS (SELECT * FROM myTable)

Estoy teniendo algunos problemas con esta declaración, debido a mi ignorancia de lo que se devuelve de esta declaración selecta:

declare @myInt as INT set @myInt = (select COUNT(*) from myTable as count) if(@myInt <> 0) begin print ''there''s something in the table'' end

Hay registros en myTable, pero cuando ejecuto el código sobre la declaración de impresión, nunca se ejecuta. Las verificaciones adicionales muestran que myInt es, de hecho, cero después de la asignación anterior. ¿Estoy seguro de que me estoy perdiendo algo, pero asumí que un recuento selecto devolvería un escalar que podría usar arriba?


[actualización] - Bueno, mi propia tontería proporciona la respuesta a esta. Resultó que estaba eliminando los registros de mi tabla antes de ejecutar la instrucción COUNT selecta.

¿Cómo hice eso y no me di cuenta? Me alegra que hayas preguntado. He estado probando una plataforma de prueba de unidades sql (tsqlunit, si está interesado) y como parte de una de las pruebas ejecuté una declaración de tabla truncada, luego la anterior. Una vez finalizada la prueba de la unidad, todo vuelve a retroceder y los registros vuelven a estar en myTable. Es por eso que obtuve un número de registros fuera de mis pruebas.

Lo siento todos ... gracias por su ayuda.


Declare @MyInt int Set @MyInt = ( Select Count(*) From MyTable ) If @MyInt > 0 Begin Print ''There''''s something in the table'' End

No estoy seguro de si este es su problema, pero debe escribir la comilla simple en la declaración impresa con una segunda comilla simple. Si bien puede usar SELECT para completar la variable, usar SET como lo ha hecho aquí es IMO muy bien y más claro. Además, se le puede garantizar que Count (*) nunca devolverá un valor negativo, por lo que solo necesita verificar si es mayor que cero.


select @myInt = COUNT(*) from myTable