SQL Server Asignar variable XML de datos de fila con espacios de nombres

Así que tengo un archivo XML completo almacenado en una sola fila/columna de una tabla. Necesito asignar eso a una variable y especificar CON NAMESPACES. Sin embargo, no puedo encontrar ninguna sintaxis que funcione.

DECLARE @xmlText xml

 set  @xmlText = (select rowdata    
 FROM dbo.Staging with (nolock)    
 WHERE     
  FileId = @FileID AND    
  ClientID = @ClientID) 

¿De alguna manera tendré que idear una declaración SQL para la ejecución? Sin embargo, si lo hago, no estoy seguro de cómo volvería a asignar eso a una variable local, ya que estaría en otro spid. ¡Estoy perplejo!


Usaré xquery :)

Esto pasó la verificación de sintaxis...

;WITH XMLNAMESPACES('http://xxx' AS p) 
(select @xmlText = rowdata    
 FROM dbo.Staging with (nolock)    
 WHERE     
  FileId = @FileID AND    
  ClientID = @ClientID) 


SELECT      
MFRRequestID = Y.i.value('(@id)[1]', 'int'),     
RequestStatus = Y.i.value('Status[1]', 'varchar(10)') ,     
AccountNumber = Y.i.value('p:AccountNumber[1]', 'varchar(10)'),    
ReferralDate = CIF.value('(ReferralDate)[1]', 'datetime'),     
SuspenseBalance = CIF.value('(SuspenseBalance)[1]', 'varchar(25)') 
FROM      @xmltext.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') 
AS Y(i) CROSS APPLY     i.nodes('p:CaseInformation') AS Tbl(CIF) 

Pero me sale el error...

XQuery [nodos()]: el nombre "p" no denota un espacio de nombres.

Esto está relacionado con una pregunta que hice ayer. Básicamente, hice que esto funcionara exactamente, pero en lugar de asignar la variable @xmltext de una tabla (que es lo que necesito hacer para el código de producción final), copié y pegué el xml y lo asigné como una cadena codificada solo para poder resolver la sintaxis de xquery. Perdón por la confusión, todo esto es bastante nuevo para mí.

preguntado el 27 de julio de 12 a las 14:07

No estas usando nodes() en su consulta por lo que tiene que ser otra consulta que le da el error. probablemente sea que consulta que necesita with namespaces( .... -

1 Respuestas

Es su segunda consulta la que necesita WITH XMLNAMESPACES.

DECLARE @xmlText xml;

SELECT @xmlText = rowdata    
FROM dbo.Staging
WHERE     
  FileId = @FileID AND    
  ClientID = @ClientID; 


WITH XMLNAMESPACES('http://xxx' AS p)
SELECT      
MFRRequestID = Y.i.value('(@id)[1]', 'int'),     
RequestStatus = Y.i.value('Status[1]', 'varchar(10)') ,     
AccountNumber = Y.i.value('p:AccountNumber[1]', 'varchar(10)'),    
ReferralDate = CIF.value('(ReferralDate)[1]', 'datetime'),     
SuspenseBalance = CIF.value('(SuspenseBalance)[1]', 'varchar(25)') 
FROM      @xmltext.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') 
AS Y(i) CROSS APPLY     i.nodes('p:CaseInformation') AS Tbl(CIF);

Respondido 27 Jul 12, 15:07

¡Oh, Lawd, lol, muchas gracias por su ayuda, señor! :) Se ve bien ahora. - Miau miau

De nada. Tenga en cuenta cómo moví el separador de declaración ; a donde pertenece :). Tiene que estar ahí antes de la with sentencia pero pertenece a la sentencia anterior. - mikael eriksson

¡Me di cuenta de eso! Me tomó un segundo. - Miau miau

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.