在Sql存储过程中使用XML PATH

时间:2010-11-30 20:59:56

标签: sql sql-server stored-procedures

我正在尝试连接焊工姓名的连接。 这就是我所拥有的:

SELECT  jsd1.JuntaSoldaduraID, 
        REPLACE(RTRIM((SELECT s1.Nombre + ' ' + s1.ApPaterno + ' ' + 
            s1.ApMaterno + '' + CAST('' AS VARCHAR(MAX)) + ' ' 
FROM JuntaSoldaduraDetalle jsd
INNER JOIN  Soldador s1 on s1.SoldadorID = jsd.SoldadorID
WHERE (jsd1.JuntaSoldaduraID = jsd.JuntaSoldaduraID) 
          and (jsd.TecnicaSoldadorID = 2)
FOR XML PATH (''))),' ',', ') AS NombreSoldador
FROM JuntaSoldaduraDetalle jsd1
INNER JOIN Soldador s
ON s.SoldadorID = jsd1.SoldadorID
GROUP BY jsd1.JuntaSoldaduraID

我能够获得我想要的信息,但有一点问题。 我想要的是“约翰史密斯,大卫罗杰斯,彼得西蒙斯”等等。换句话说,用逗号分隔的全名。 但我收到了“约翰,史密斯,大卫,罗杰斯,彼得,西蒙斯”......

任何帮助表示感谢。

提前致谢。

2 个答案:

答案 0 :(得分:3)

您的REPLACE将用逗号替换所有空格。相反,请将逗号作为查询的一部分,并使用STUFF删除第一次出现的逗号。如果任何名称字段为NULL,您可能还希望使用COALESCE

SELECT  jsd1.JuntaSoldaduraID, 
        STUFF((SELECT ', ' + COALESCE(s1.Nombre + ' ','') 
                           + COALESCE(s1.ApPaterno + ' ','') 
                           + COALESCE(s1.ApMaterno,'')
                   FROM JuntaSoldaduraDetalle jsd
                       INNER JOIN  Soldador s1 
                           on s1.SoldadorID = jsd.SoldadorID
                   WHERE jsd1.JuntaSoldaduraID = jsd.JuntaSoldaduraID 
                       and jsd.TecnicaSoldadorID = 2
                   FOR XML PATH ('')),1,2,'') AS NombreSoldador
    FROM JuntaSoldaduraDetalle jsd1
        INNER JOIN Soldador s
            ON s.SoldadorID = jsd1.SoldadorID
    GROUP BY jsd1.JuntaSoldaduraID

答案 1 :(得分:0)

您正在使用逗号和空格替换结果中的单个空格。

如果从查询中删除REPLACE,结果是什么?