2009-05-27 8 views

Odpowiedz

0

Dla tych, za pomocą SQL Server 2000 FOR XML jest obok bezużyteczne; Nie można przypisać wygenerowany XML do zmiennej, wstawić do tabeli, itd. Musiałem to zrobić ręcznie, gdy jest to wymagane, oto moja próbka:

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 .. Zmusiłeś mnie do wymyślenia musu z marakui. MNIE! – ErikE

+1

Uwaga: serwer połączony sprzężeniem zwrotnym w SQL 2000 nie rozwiązuje problemu. Wynikiem zapytania FOR XML jest obraz typu danych. To nie jest rozsądna wartość. Będziecie walczyć, walczyć i ostatecznie nic nie robić, tylko marnować czas. – ErikE