saving the FOR XML AUTO results to variable in SQL

后端 未结 3 1092
南方客
南方客 2020-12-15 18:43
select @result=@input.query(\'*\')
for xml raw,type  

Above statement will generate following alert:
Msg 6819, Level 16, State 3, Line 2
Th

3条回答
  •  粉色の甜心
    2020-12-15 18:56

    For those using SQL SERVER 2000, FOR XML is next to useless; You cannot assign the generated XML into a variable, insert into a table, etc. I had to do it manually when required, here's my sample:

    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
    --> 
    
    
    
    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 '', 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 = '' + @xmlRowStr + ''
    end
    select @xmlRowStr as XmlOut
    
    
    DROP TABLE #parcelData 
    
    SET NOCOUNT OFF
    

提交回复
热议问题