我有这个查询
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('')
返回此输出:
我想将其转换为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。
答案 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