这里是我的函数代码:
-- 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
会返回预期的国家/地区。
感谢您的帮助!
埃里克
答案 0 :(得分: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, '')
这应该为您返回以逗号分隔的国家/地区名称列表。不需要丑陋和可怕的光标!
答案 1 :(得分: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, '');