1

这是我函数中的代码:

-- Get Country Names
DECLARE getCountriesName CURSOR FOR
    SELECT c.Name
    FROM VocabCountry c
        RIGHT OUTER JOIN ProjectCountryRelations cr
            ON cr.CountryId = c.Id
    WHERE 
        c.Id = @project_id;

-- Finally Create list to return 
OPEN getCountriesName;
FETCH NEXT FROM getCountriesName INTO @Name;
WHILE @@FETCH_STATUS = 0
BEGIN  

    SET @listOfItems = @listOfItems + @Name + ', '
    FETCH NEXT FROM getCountriesName INTO @Name;

END;
CLOSE getCountriesName;
DEALLOCATE getCountriesName;

我期待一个逗号分隔值的列表,例如,像这样:

Canada, United States of America,

我验证SELECT了国家预期的回报。

谢谢你的帮助!

埃里克

4

2 回答 2

2

如果您使用的是 SQL Server 2008或更高版本,您可以使用单个 SELECT 和一些FOR XML PATH魔法轻松完成此操作 :-)

SELECT 
    STUFF(
       (SELECT ',' + c.Name
        FROM VocabCountry c
        RIGHT OUTER JOIN ProjectCountryRelations cr
        ON cr.CountryId = c.Id
        FOR XML PATH('')
       ), 1, 1, '')

这应该为您返回这些国家名称的逗号分隔列表。不需要丑陋和可怕的光标!

于 2012-07-11T14:34:58.093 回答
2

使用FOR XML PATH将用逗号连接值。

使用该STUFF函数将删除您不想要的第一个逗号。

所以使用这个:

SELECT 
    STUFF(
       (SELECT ',' + c.Name
        FROM VocabCountry c
        RIGHT OUTER JOIN ProjectCountryRelations cr
        ON cr.CountryId = c.Id
        WHERE cr.Id = @project_id
        FOR XML PATH('')
       ), 1, 1, '');

看到这个小提琴:http ://sqlfiddle.com/#!3/fd648/21

于 2012-07-11T14:41:53.597 回答