¿Cómo verifico un parámetro con valores de tabla nulo o vacío?


9

Tengo un procedimiento almacenado (SS2k8) con un par de parámetros con valores de tabla que a veces serán nulos o vacíos. He visto esta publicación de StackOverflow que dice que los TVP nulos / vacíos simplemente deberían omitirse de la lista de parámetros de llamada. Mi problema es que no puedo encontrar la manera de verificar si está vacío o nulo dentro del procedimiento almacenado ya que "IF (@tvp IS NULL)" falla en la creación del procedimiento con el mensaje 'Debe declarar la variable escalar "@tvp"'. ¿Tengo que hacer un SELECT COUNT (*) en el TVP y verificar cero?

Extracto del código:

CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS

IF (@tvp IS NOT NULL) -- doesn't work
BEGIN
  -- lots of expensive processing
END
ELSE
BEGIN
  -- a little bit of cheap processing
END
...

Respuestas:


14

Una mesa no puede ser NULL, ni un TVP. ¿Cómo se verifica si una mesa está vacía? Ciertamente no lo dices IF Sales.SalesOrderHeader IS NULL. :-)

IF EXISTS (SELECT 1 FROM @tvp)
BEGIN
  -- lots of expensive processing
END
ELSE
BEGIN
  -- a little bit of cheap processing
END
...

3

El parámetro con valores de tabla no será nulo. Trátelo más como una mesa y @aaraon Bertrand me dio una paliza. Entonces sí, verifique si hay filas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.