Homa Page di Daniele Franceschini
Apertura di un cursore su una fonte dati xml
A volte potrebbe essere necessario fare una stored procedure che possa aggiornare i dati di una tabella provenienti da un XML, inoltre potrebbe essere necessario aprire un cursore sui dati provenienti dal parametro XML per fare delle operazioni prima dell'aggiornamento. Il sottostante esempio mostra come aprire un cursore su una fonte dati XML.
create procedure dbo.usp_InsertXMLIntoTable(@myxml varchar(1000)) as
declare @esito smallint
declare @DocHandle int
declare @id int
declare @description varchar(100)
/*
Un XML di esempio per capire meglio la procedura potrebbe essere questo:
<xml>
<myElement id='12345' description ='prova1' />
<myElement id='67890' description ='prova2' />
</xml>
*/
set @esito = 0
--CREO UNA RAPPRESENTAZIONE INTERNA DEL DOCUMENTO XML
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @myxml
begin transaction
--DICHIARO E APRO UN CURSORE SUL PARAMETRO XML PASSATO E LO RIEMPIO CON GLI ATTRIBUTI DEI VARI ELEMENTI
declare my_cursor cursor for
select * from openxml (@DocHandle, '/xml/myElement',1)
with (
id int,
description varchar(100)
)
open my_cursor
FETCH NEXT FROM my_cursor INTO @id, @description
WHILE @@FETCH_STATUS = 0
BEGIN
delete from myTable where id = @id
insert into myTable(id, description)
values (@id, @description)
set @esito = @esito + 1
FETCH NEXT FROM my_cursor INTO @id, @description
END
EXEC sp_xml_removedocument @DocHandle
commit transaction
if (@@error <> 0)
begin
set @esito = -1
rollback transaction
EXEC sp_xml_removedocument @DocHandle
end
close my_cursor
deallocate my_cursor
return @esito



