2009-05-27 2 views

Antwort

0

Für die SQL Server 2000 unter Verwendung von XML nutzlos nächsten ist; Sie können nicht die generierte XML-Code in einer Variablen zuweisen, legen Sie in eine Tabelle usw. hatte ich es manuell tun, wenn erforderlich, hier ist mein Beispiel:

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 in SQL Server funktioniert .. Du hast mich an Passionsfrucht-Mousse denken lassen. YUM! – ErikE

+1

Hinweis: Ein Loopback-Verbindungsserver unter SQL 2000 löst das Problem nicht. Das Ergebnis der FOR XML-Abfrage ist der Datentyp image. Es ist nicht einmal ein vernünftiger Wert. Du wirst kämpfen und ringen und letztlich nichts als Zeit verschwenden. – ErikE