2017-02-09 119 views
0

我有这个疑问转换XML输出为varchar

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 

但我得到一个错误:

消息1086,级别15,状态1,行18
FOR XML子句是在视图中无效,内联函数,派生表和子查询,当它们包含set操作符时。要解决此问题,请使用派生表语法来包装包含set操作符的SELECT,然后在其上应用FOR XML。

回答

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