Update XML in SQL Server 2005 zonder Node veroorzaakt een Null-fout

Dus ik heb een script om de XML-waarde van het volgende knooppunt bij te werken/in te voegen:

False

Het probleem is dat niet alle rijen het knooppunt bevatten en daarom wordt de fout gegenereerd: "Mutator" modify() 'on' @temp 'kan niet worden aangeroepen op een nulwaarde. "

Wat moet ik doen om de rijen eruit te filteren die niet het "Ingezonden" knooppunt binnen de xml bevatten?

** Let op, ik heb al deze gekke CASTS omdat het kolomtype TEXT is en niet kan worden gewijzigd omdat de client het oorspronkelijk zo heeft ingesteld.

DECLARE @temp XML

SELECT 
     @temp = CAST(CAST(TicorOregon..tbl_Module_RequestForms_Items.XML AS NTEXT) AS XML) 
FROM 
     TicorOregon..tbl_Module_RequestForms_Items
WHERE
 CAST(CAST(TicorOregon..tbl_Module_RequestForms_Items.XML AS NTEXT) AS XML).value('(//Record/Submitted)[1]', 'NVARCHAR(max)') <> 'True'

-- modification to local xml var
SET 
   @temp.modify('replace value of (//Record/Submitted[1]/text())[1] with "True"') 

-- write it back into the table as TEXT column      
UPDATE 
   TicorOregon..tbl_Module_RequestForms_Items
SET 
   xml = CAST(CAST(@temp AS VARCHAR(MAX)) AS TEXT)
WHERE
 CAST(CAST(TicorOregon..tbl_Module_RequestForms_Items.XML AS NTEXT) AS XML).value('(//Record/Submitted)[1]', 'NVARCHAR(max)') <> 'True'
AND  CAST(CAST(TicorOregon..tbl_Module_RequestForms_Items.XML AS NTEXT) AS XML).value('(//Record/Submitted)[1]', 'NVARCHAR(max)') <> null
0
Bedankt. Het is het beste wat ik kan doen met deze verdomde kolom die TEXT is en de gegevens-XML, zonder de manier waarop het kolomtype kan worden gewijzigd, dankzij de klant die dit heeft ingesteld.
toegevoegd de auteur the sandman, de bron
Ik denk dat ik een IF EXISTS-verklaring moet toevoegen, nu hier aan het werken
toegevoegd de auteur the sandman, de bron

1 antwoord

Test uw XML-variabele op nul voordat u probeert bij te werken.

if @temp is not null
begin
  -- modification to local xml var
  SET @temp.modify ----

  -- write it back into the table as TEXT column
  SET @temp.modify....
end

Opmerking: mogelijk hebt u problemen met deze code als er meer dan één rij is met False . U krijgt de xml uit één rij in @temp (waarschijnlijk de laatste volgens een bepaalde index) maar u werkt alle rijen bij waarbij False met die XML.

1
toegevoegd
Kun je me een plezier doen met deze: stackoverflow.com/questions/32974700/…
toegevoegd de auteur Si8, de bron
precies wat ik nodig had. JE BENT DA MAN!
toegevoegd de auteur the sandman, de bron