在运算符中用逗号连接列值

时间:2014-05-28 20:45:34

标签: sql sql-server

我有以下xml格式

<Request  SearchType="CUSIPISIN">
                  <Identifiers>
                       <Identifier id="US04012VAA70"/>
                       <Identifier id="553061AA0"/>
                  </Identifiers>
       </Request>

在我的sql server storage proc

alter  PROCEDURE [dbo].[Search]
    @RequestXml XML

AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @SearchType varchar(50);
    set @SearchType= @requestXml.value('(//Request/@SearchType)[1]', 'varchar(10)')


    SELECT Tbl.Col.value('@id', 'VARCHAR(30)') AS tr
    FROM @RequestXml.nodes('//Identifier') Tbl(Col)

end

如何创建一个从这个xml分隔的逗号,以便我可以使用IN子句的那一部分 像

select * from products where identifier in (US04012VAA70,553061AA0)

任何帮助都会得到很大的帮助

1 个答案:

答案 0 :(得分:2)

如果您想将此数据放入IN,我认为您需要创建动态代码。

但如果没有必要,你可以这样使用:

DECLARE @xml  XML = N'
<Request  SearchType="CUSIPISIN">
                  <Identifiers>
                       <Identifier id="US04012VAA70"/>
                       <Identifier id="553061AA0"/>
                  </Identifiers>
       </Request>
    '   

DECLARE @table TABLE ( xmlData VARCHAR(30))

INSERT INTO @table
exec [dbo].[SearchByCusipIsinDealName] @xml


SELECT * 
FROM products AS P
INNER JOIN @table AS T
    ON T.xmlData = P.identifier