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 に答える