¿Por qué recibo un error de Mutator al modificar un valor Xml en Sql?

Tengo el siguiente procedimiento almacenado:

ALTER PROCEDURE [dbo].[UpPro] ( @PN varchar(200), @xml xml, @gVa varchar(10), ) AS /* update the gender */ BEGIN SET NOCOUNT ON; Select @gVa = t1.[Gender] From [myDb].[dbo].[myTable1] t1 --replace Value2 and table to the table which is updated through SSIS Where t1.Name = @PN PRINT @gVa //displays 'F' Set @xml.modify('replace value of (/root/Phys/gender/text())[1] with sql:variable("@gVa")'); END /* once all the node has been "temporarily" changed, update the table columns for the provider */ BEGIN --update the table after casting dummy xml variable Update [myDb].[dbo].[TC] Set [chtml] = cast(cast(@xml as nvarchar(max)) as ntext) Where [ctitle] = @PN END 

Cuando ejecuto la consulta, aparece el siguiente error:

Msg 5302, nivel 16, estado 1, procedimiento UpPro, línea 115
Mutator 'modify ()' en '@xml' no puede invocarse en un valor nulo.

¿Cómo puedo resolver el error? Estoy tratando de actualizar el valor xml en una columna ( chtml ) que es de tipo ntext en la tabla TC .

Por favor, avíseme si tengo que proporcionar más información.

Solo para probar el código, intenté lo siguiente y todavía me dio el mismo error:

 DECLARE @gVa varchar(10) DECLARE @xml xml Select @gVa = t1.[Gender] From [myDb].[dbo].[myTable1] t1 --replace Value2 and table to the table which is updated through SSIS Where t1.Name = 'Doctor 1' PRINT @gVa If @xml IS NOT NULL BEGIN Set @xml.modify('replace value of (/root/Phys/gender/text())[1] with sql:variable("@gVa")'); END Else BEGIN PRINT 'NOT WORK' END 

Mantiene la printing NOT WORK

chtml originales de la columna ( chtml ):

 <?xml version="1.0" encoding="UTF-8"?> <root> <Phys> <gender>M</gender> </Phys> </root> 

Después de que se ejecuta el SP anterior, el gender debe ser F y no M

El error realmente lo dice todo, @XML es nulo y eso no está permitido.

Repro:

 declare @X xml; set @X.modify('replace value of text()[1] with "1"'); 

Msg 5302, nivel 16, estado 1, línea 4 Mutator 'modify ()' en '@X' no se puede llamar en un valor nulo.

Compruebe null antes de modificar.

 declare @X xml; if @X is not null set @X.modify('replace value of text()[1] with "1"'); 
Intereting Posts