将XML输出转换为varchar

时间:2017-02-09 05:24:20

标签: sql-server tsql

我有这个查询

select 
    ',' + CONVERT(VARCHAR,FileID) 
from 
    [RETRY_INPUT_JSON] A 
inner join 
    RETRY_JSON_STATUS B on JsonStatus = StatusID
where 
    RetryStatus = 'FAILED'          

Union

select 
    ',' + CONVERT(VARCHAR,FileID)   
from 
    [RETRY_INPUT_JSON] A 
inner join 
    RETRY_JSON_STATUS B on SendESBStatus = StatusID
where 
    RetryStatus In ('FAILED', 'Success')            
order by
    ',' + CONVERT(VARCHAR,FileID) 
FOR XML PATH('')

返回此输出:

enter image description here

我想将其转换为varchar

为此,我尝试了:

DECLARE @FILEID AS VARCHAR(MAX)

        SET @FILEID =(SELECT STUFF
                        (
                            (
select ',' + CONVERT(VARCHAR,FileID) from [RETRY_INPUT_JSON] A inner join RETRY_JSON_STATUS B
        on JsonStatus=StatusID
        where RetryStatus='FAILED'          
        Union
        select ',' + CONVERT(VARCHAR,FileID)   from [RETRY_INPUT_JSON] A inner join RETRY_JSON_STATUS B
        on SendESBStatus=StatusID
        where RetryStatus In ('FAILED','Success')           
        ORDER BY ',' + CONVERT(VARCHAR,FileID) FOR XML PATH('') 
    ),
                             1, 1, ''
                        ) )

print @FILEID

但是我收到了一个错误:

  

Msg 1086,Level 15,State 1,Line 18
  当FOR XML子句包含set运算符时,它们在视图,内联函数,派生表和子查询中无效。要解决此问题,请使用派生表语法包装包含set运算符的SELECT,并在其上应用FOR XML。

1 个答案:

答案 0 :(得分:1)

检查这个。

        DECLARE @FILEID AS VARCHAR(MAX)
        DECLARE @xml_var XML 

        SET @xml_var = ( select ',' + CONVERT(VARCHAR,A)   
                            from
                                (

                                        select 
                                        CONVERT(VARCHAR,FileID) A
                                        from 
                                        [RETRY_INPUT_JSON] A 
                                        inner join 
                                        RETRY_JSON_STATUS B on JsonStatus = StatusID
                                        where 
                                        RetryStatus = 'FAILED'     

                                Union

                                        select 
                                        CONVERT(VARCHAR,FileID)   A
                                        from 
                                        [RETRY_INPUT_JSON] A 
                                        inner join 
                                        RETRY_JSON_STATUS B on SendESBStatus = StatusID
                                        where 
                                        RetryStatus In ('FAILED', 'Success')            


                                )A   
                                order by A 
                                FOR XML PATH('') 
                        )

        select @FILEID = CONVERT(VARCHAR(MAX), @xml_var)
        SELECT @FILEID
        pRINT @FILEID