SQL Server 中的高效能字串連線:繞過 CLR 限制
將多行中的字串聚合為單一字串是一項常見的 SQL Server 任務。雖然像 COALESCE
和 FOR XML PATH
這樣的方法存在,但它們在效率方面往往不夠。 在 SQL Azure 中尤其如此,它缺乏對 CLR 函數的支持,從而消除了常見的高效能解決方案。
有效的替代方案:遞迴 CTE 方法
一個強大且高效的替代方案利用遞歸公共表表達式(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 為 SQL Server 中的字串連接提供了可擴展且高效的解決方案,特別是在 CLR 函數不可用的環境中。 請注意使用 nvarchar(max)
來處理可能較大的串聯字串。
以上是如何在不使用 CLR 函數的情況下高效連接 SQL Server 中多行的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!