首頁 > 資料庫 > mysql教程 > 如何在不使用 CLR 函數的情況下高效連接 SQL Azure 中多行的字串?

如何在不使用 CLR 函數的情況下高效連接 SQL Azure 中多行的字串?

Susan Sarandon
發布: 2025-01-20 09:07:10
原創
678 人瀏覽過

How Can I Efficiently Concatenate Strings from Multiple Rows in SQL Azure Without CLR Functions?

超越 COALESCE 和 FOR XML:SQL Azure 中的高效字串聚合

許多尋求從多個 SQL 行進行高效字串串聯的開發人員會遇到 SQL Azure 中 COALESCEFOR XML 等標準函數的限制,特別是當 CLR 函數不可用時。本文介紹了一個強大的 Transact-SQL 解決方案,它使用公共表表達式 (CTE) 來實現健全且高效的字串聚合。

解:用於順序串聯的遞歸 CTE

我們的方法利用兩個 CTE:

  1. Partitioned CTE: 這將根據 ID 列為每個條目分配行號,並按 Name 列按字母順序排序。這一關鍵步驟將具有相同 ID 的行分組,並確保一致的串聯順序。

  2. Concatenated CTE(遞歸): 此 CTE 迭代建立連接字串。它遞歸地將名稱附加到 FullName 列,累積最終結果。

然後,主查詢僅選擇每個 ID 具有最高行號的行,從而為每個群組產生完整的聚合字串。

詳細的細分和自訂選項

此方法包含三個核心階段:

  1. 行分區和編號:這建立了準確連接所需的分組和排序。
  2. 遞歸字串累積: 遞歸 CTE 有效地在 FullName 列中建立聚合字串。
  3. 結果過濾:最終查詢只選擇完整的連接字串,每個唯一的ID

這種技術提供了靈活性。您可以調整分組(在此範例中為 ID)和排序標準(此處為 Name 按字母順序排列)以適合您的特定資料結構和要求。 一致的結果取決於定義分組和排序參數。

說明性範例與輸出

讓我們使用這個範例資料:

<code class="language-sql">INSERT dbo.SourceTable (ID, Name)
VALUES 
(1, 'Matt'),
(1, 'Rocks'),
(2, 'Stylus'),
(3, 'Foo'),
(3, 'Bar'),
(3, 'Baz')</code>
登入後複製

執行查詢將產生:

<code>ID          FullName
----------- ------------------------------
2           Stylus
3           Bar, Baz, Foo
1           Matt, Rocks</code>
登入後複製

這清楚地展示了跨多行字串的有效串聯,為 SQL Azure 字串聚合任務提供了 CLR 函數的可靠替代方案。

以上是如何在不使用 CLR 函數的情況下高效連接 SQL Azure 中多行的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板