ホームページ >データベース >mysql チュートリアル >CLR 関数を使用せずに SQL Server の複数の行の文字列を効率的に連結するにはどうすればよいですか?
SQL Server での高パフォーマンスの文字列連結: CLR 制限のバイパス
複数の行の文字列を 1 つの文字列に集約することは、SQL Server で頻繁に行われるタスクです。 COALESCE
や FOR XML PATH
のようなメソッドは存在しますが、効率の点で不十分なことがよくあります。 これは特に SQL Azure に当てはまります。SQL Azure では CLR 関数がサポートされていないため、一般的な高パフォーマンスのソリューションが利用できません。
効果的な代替案: 再帰的 CTE アプローチ
堅牢で効率的な代替手段は、再帰的な Common Table Expression (CTE) を利用します。この手法には次の重要な手順が含まれます:
このメソッドは、明示的なグループ化と並べ替えを通じて一貫した結果を保証します。
実際の実装:
これは再帰 CTE を使用したサンプル実装です:
<code class="language-sql">WITH Partitioned AS ( SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber, COUNT(*) OVER (PARTITION BY ID) AS NameCount FROM dbo.SourceTable ), Concatenated AS ( SELECT ID, CAST(Name AS nvarchar(max)) AS FullName, Name, NameNumber, NameCount FROM Partitioned WHERE NameNumber = 1 UNION ALL SELECT P.ID, CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), P.Name, P.NameNumber, P.NameCount FROM Partitioned AS P INNER JOIN Concatenated AS C ON P.ID = C.ID AND P.NameNumber = C.NameNumber + 1 ) SELECT ID, FullName FROM Concatenated WHERE NameNumber = NameCount;</code>
この再帰的 CTE は、特に CLR 関数が利用できない環境において、SQL Server での文字列連結のためのスケーラブルで効率的なソリューションを提供します。 nvarchar(max)
を使用して、潜在的に大きな連結文字列を処理することに注意してください。
以上がCLR 関数を使用せずに SQL Server の複数の行の文字列を効率的に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。