2009-05-27 17 views

risposta

0

Per coloro che utilizzano SQL Server 2000, FOR XML è quasi inutile; Non è possibile assegnare il codice XML generato in una variabile, inserire in una tabella, ecc ho dovuto farlo manualmente in caso di necessità, ecco il mio esempio:

SET NOCOUNT ON 

create table #parcelData (
    parcelID int 
    , [description] varchar(20) 
) 
--insert sample data 
insert into #parcelData 
select 1, 'apples' UNION 
select 3, 'oranges' UNION 
select 25, 'bananas' UNION 
select 69, 'maracuja' 


print '-- Example 1: FOR XML RAW --' 
select parcelID as pID 
from #parcelData 
ORDER BY parcelID 
FOR XML RAW 
--> <row pID="17"/><row pID="25"/><row pID="26"/><row pID="333"/> 



print '-- Example 2: Build XML Manually --' 

declare @parcelRow varchar(50), @dummy int 
    , @xmlRowStr varchar(8000) 
set @xmlRowStr = '' -- initialize. 

DECLARE parcel_cursor CURSOR FOR 
    select DISTINCT '<row pID="' + cast(parcelID as varchar(10)) + '"/>', parcelID as parcelRow 
    from #parcelData 
    ORDER BY parcelID 
OPEN parcel_cursor 

FETCH NEXT FROM parcel_cursor 
INTO @parcelRow, @dummy 

WHILE @@FETCH_STATUS = 0 BEGIN 
    -- build the xml row by row. 
    set @xmlRowStr = @xmlRowStr + @parcelRow 

    -- Get next row 
    FETCH NEXT FROM parcel_cursor 
    INTO @parcelRow, @dummy 
END 

CLOSE parcel_cursor 
DEALLOCATE parcel_cursor 
--print @xmlRowStr 

-- wrap a root element around 
if @xmlRowStr != '' begin 
    set @xmlRowStr = '<ROOT>' + @xmlRowStr + '</ROOT>' 
end 
select @xmlRowStr as XmlOut 


DROP TABLE #parcelData 

SET NOCOUNT OFF 
+0

Mmmm .. mi hai fatto pensare alla mousse del frutto della passione. YUM! – ErikE

+1

Nota: un server collegato loopback su SQL 2000 non risolve il problema. Il risultato della query FOR XML è l'immagine del tipo di dati. Non è nemmeno un valore ragionevole. Combatterai e lotterai e alla fine non farai altro che perdere tempo. – ErikE

Problemi correlati