Solución:
Puede verificar NULL
y ausencia de nodosexist
método de xml
escribe):
@ListNoteTypeCode is NULL OR @ListNoteTypeCode.exist('*') = 0
Su XPath puede ser más específico, si es necesario:
@ListNoteTypeCode is NULL OR @ListNoteTypeCode.exist('/BulletPoint/NoteTypeCode/text()') = 0
Otra forma de probar un parámetro, una variable o una columna XML vacíos es comprobar la DATALENGTH
. Cualquier elemento XML vacío debe tener 5 bytes. Por ejemplo:
DECLARE @Test TABLE (XmlParam XML NULL);
INSERT INTO @Test ([XmlParam]) VALUES (NULL), (N''), (N'g');
SELECT t.[XmlParam],
DATALENGTH(t.[XmlParam]) AS [DATALENGTH],
CASE (ISNULL(DATALENGTH(t.[XmlParam]), 5))
WHEN 5 THEN 'EMPTY'
ELSE 'Not Empty'
END AS [IsEmpty]
FROM @Test t;
Devoluciones:
XmlParam DATALENGTH IsEmpty
-------- ---------- ---------
NULL NULL EMPTY
5 EMPTY
g 9 Not Empty
Tenga en cuenta que usé ISNULL(DATALENGTH(t.[XmlParam]), 5)
ya que debería estar bien para verificar un parámetro o variable. Si revisa una columna, podría ser mejor usar XmlColumn IS NULL OR DATALENGTH(XmlColumn) = 5
.
Tenga en cuenta también que si bien es posible para que la representación interna de datos XML cambie entre versiones, he probado en SQL Server 2008 R2, 2012 y 2014 y el tamaño de un elemento XML vacío es consistentemente 5.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)