-1

重複の可能性:
多くの行を1つのテキスト文字列に連結しますか?

SQL Server 2008データベースには、tblQuestionとtblSummaryの2つのテーブルがあります。次のようにtblQuestionからQuestionIDを選択しています。

SELECT QuestionId from tblQuestion WHERE Status='Completed';

結果は次のとおりです(複数のレコードから)、

QuestionId 
----------
1
2
5
7
8
9

[6 rows]

次に、上記で選択したIDをtblSummaryの「CompletedSections」列(VARCHARタイプ)に挿入する必要があります。これは、CSVのような形式で挿入する必要があります-1、2、5、7、8、9

たとえば、tblSummaryからそれらを選択すると、次のようになります。

SELECT CompletedSections FROM tblSummary WHERE <Some Condition>

結果は、

CompletedSections 
-----------------
1,2,5,7,8,9

[1 row]

これは、t-SQLを使用して(C#のようなプログラミング言語を使用せずに)データベースレベルでどのように実行できますか?スケジュールされたSQLSP/関数/トリガーを使用してt-SQLでこれを実装したいと思っています。

ありがとう、

チャトゥール

4

3 に答える 3

2

これは私が過去に使用したソリューションです。少しハックですが、カーソルを使用して CSV を作成するよりも高速です。開始するためのコード例を次に示します。

DECLARE @tblQuestion TABLE
(
     QuestionId nvarchar(10)
)

DECLARE @tblSummary TABLE
(
    CompletedSections nvarchar(100)
)

INSERT INTO @tblQuestion
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)

INSERT INTO @tblSummary
SELECT SUBSTRING(
(SELECT ',' + QuestionId 
from @tblQuestion 
FOR XML PATH('')),2,200000) AS CSV

SELECT * FROM @tblSummary
于 2012-11-20T16:17:21.413 に答える
1

これでうまくいきます。

DECLARE @S VARCHAR(5000)

SELECT @S=ISNULL(@S+ ',', '') + CONVERT(VARCHAR(10),QuestionId)
FROM tblQuestion 

SELECT @S
于 2012-11-20T16:08:04.243 に答える
-2
    DECLARE @STRING VARCHAR(MAX) = ''
    DECLARE @VALUE VARCHAR(MAX)

    DECLARE A_CURSOR CURSOR FOR
    SELECT QuestionId from tblQuestion WHERE Status='Completed'

    OPEN A_CURSOR
    FETCH A_CURSOR INTO @VALUE

    WHILE @@FETCH_STATUS = 0
    BEGIN

    if @STRING <> ''
    set @STRING = @STRING + ', '

    set @STRING = @STRING + CONVERT(VARCHAR(MAX),@VALUE)

    FETCH A_CURSOR INTO @VALUE

    END

    CLOSE A_CURSOR

    DEALLOCATE A_CURSOR

    INSERT INTO CompletedSection (tblSummary) SELECT @STRING
于 2012-11-20T16:00:08.923 に答える