Dataverse · Dynamics 365 · TDS

T-SQL FetchXML
轉換資源整理

將 Microsoft Dataverse 用的 T-SQL(含 TDS endpoint 語法)轉成 FetchXML 的工具、開源專案與技術文章彙整 —— 聚焦於可程式化嵌入 NL2SQL / eval pipeline 的方案。

整理日期 2026-06-02 · 6 項資源 · 4 個開源 · 3 篇延伸閱讀

00總覽對照

資源類型開源推薦一句話
SQL 4 CDSEngine + XrmToolBox/SSMS/ADS 外掛 + NuGet✅ 開源★★★★★最完整、唯一仍積極維護
SQL2FetchXML線上轉換器★★★☆免安裝快試,但限制多
FetchXmlToSql APIDataverse 內建(未文件化)★★★反向轉換,官方途徑
FetchXML BuilderXrmToolBox 外掛✅ 開源★★★★編輯 FetchXML + 產生多種語法
FetchXML StudioPower Platform ToolBox 外掛✅ 開源★★★視覺化建構 + SQL↔FetchXML 雙向預覽
Convert queries 範例.NET SDK 範例✅ 開源★★FetchXML↔QueryExpression

01SQL 4 CDS

首選開源NuGet 可嵌入TDS endpoint
作者 Mark Carrington
NuGet MarkMpn.SQL4CDS

它能做什麼

讓你用標準 SQL 語法查詢與操作 Dataverse / D365 的資料與 metadata,支援 SELECT / INSERT / UPDATE / DELETE。在可能時,查詢會被轉成 FetchXML —— 因此你可以用熟悉的 SQL 產生 FetchXML,再用於 plugin 或整合。

為什麼適合 NL2SQL / TDS 場景

進階能力

產生的 FetchXML 中會帶上 xmlns:generator="MarkMpn.SQL4CDS" 命名空間並盡量內含完整 filter,例如:

<fetch xmlns:generator="MarkMpn.SQL4CDS">
  <entity name="contact">
    <attribute name="firstname" />
    <attribute name="lastname" />
    <attribute name="contactid" />
    <filter>
      <condition attribute="statecode" operator="eq" value="0" />
    </filter>
  </entity>
</fetch>

取得方式

部分查詢無法純靠 FetchXML 執行,這類會出現警告,表示需要 SQL 4 CDS 額外的記憶體內處理。這個「可否完全下推」的訊號,剛好可拿來當 eval 指標。

02SQL2FetchXML

線上服務KingswaySoft免安裝

貼上 SQL 點 convert 即得 FetchXML,適合快速試手。支援 SELECT FROM WHERE AND OR LIKE GROUP BY ORDER BY AS TOP DISTINCT NOLOCK INNER JOIN LEFT OUTER JOIN ON IN 與聚合 COUNT/MAX/MIN/AVG/SUM,並會自動移除 Filtered 前綴。

運算子表示法

FetchXML 專屬運算子用去掉 dash 的 SQL 函式表示:next-x-weeksnextxweeks(n)todaytoday()eq-useridequserid()。若運算子本身是 SQL 關鍵字(如 onin)需加 x 前綴:

SELECT * FROM contact
WHERE createdon = xon('2011-01-11T00:00:00')
已知限制:對括號、巢狀 select 處理不佳;大小寫偶有出錯;無法處理 NOT IN / NOT EXISTS / EXCEPT(多半其實是 FetchXML 本身限制)。嚴謹評估建議以 SQL 4 CDS 為主,本工具僅作快速參照、勿當 ground truth。

03FetchXmlToSql Custom API

官方內建未文件化反向

方向與你需求相反(FetchXML → SQL),但屬官方途徑。透過 Dataverse 內建但未文件化的 Custom API Function FetchXMLToSql

GET https://{your_environment}.api.crm.dynamics.com
    /api/data/v9.2/FetchXMLToSQL(FetchXml=@p1)
    ?@p1='{Your_FetchXML}'

也可在 XrmToolBox 用 Custom API Tester 呼叫。常見用途是 virtual table 指向 SQL Server 時把 FetchXML 轉回 SQL。

⚠️ 因屬未文件化功能,無保證持續可用,正式產品不建議依賴。

04FetchXML Builder

開源XrmToolBox多語法輸出

對 Dataverse / Power Apps / D365 建立與執行 FetchXML。對本主題的價值在於能在多種語法間互轉:產生 C# QueryExpression、WebAPI / OData query string、Power Automate List Records、SQL / JavaScript / C# stub。可與 SQL 4 CDS 互通 —— 在 SQL 4 CDS 寫 SQL → 丟到 Builder 編輯,反之亦可。

05FetchXML Studio

開源Power Platform ToolBox視覺化

Power Platform ToolBox 生態系的開源視覺化 FetchXML 建構器。主要用途是編寫 FetchXML,但整合了 §03 提到的未文件化 FetchXMLToSQL API,提供 SQL ↔ FetchXML 雙向預覽,可當作語法對照時的另一個快速工具。

06官方 SDK 範例:FetchXML ↔ QueryExpression

開源範例PowerApps-Samples

文件:learn.microsoft.com — Convert queries sample

示範用 QueryExpressionToFetchXmlRequestFetchXmlToQueryExpressionRequest 雙向轉換。雖非 T-SQL→FetchXML,但若 pipeline 已用 QueryExpression 作中介層,這是官方支援的轉換路徑。

07延伸閱讀:技術部落格

部落格MVP社群

Mark Carrington 官方部落格

SQL 4 CDS 原作者本人的部落格,是這個主題最深入的技術來源。詳述 TDS Endpoint 底層、把 cursor、UNION hint、大量 UPDATE 等較難語法轉成 FetchXML 的內部實作與效能優化心得,是想理解 §01 engine 行為時的第一手材料。

Hosk's Dynamics 365 Blog

Microsoft MVP 從企業架構師視角介紹如何用既有 SQL 知識,透過開源工具快速縮短上手 Dataverse FetchXML 的曲線,含實務維運腳本範例。適合決策層與初次接觸 Dataverse 的 SQL 老手。

Msdynamicsblog (Deepesh Somani) & Arun Potti's Blog

社群經典的「思維轉換」教學。示範用早期 KingswaySoft 的 sql2fetchxml.com 線上服務,把常見 Inner / Left Join 與篩選條件對應到 FetchXML 的 <link-entity><filter> 節點 —— 文章雖舊,對建立心智模型仍很有用。

給 Dataverse NL2SQL / TDS 的建議

  1. 程式化嵌入:直接用 MarkMpn.SQL4CDS engine NuGet,把模型產生的 T-SQL 餵進去轉 FetchXML,並比對是否「可完全下推」(fully foldable) 作為一個 eval 指標。
  2. 可下推性是好訊號:能完全轉成 FetchXML,代表查詢落在 Dataverse 原生能力內;需要記憶體處理的部分可標記為「超出 FetchXML / 可能超出 TDS endpoint」案例。
  3. TDS endpoint 對齊:SQL 4 CDS 的 connection 屬性可切換是否走 TDS endpoint,方便比較 FetchXML 路徑與 TDS 路徑的行為差異(呼應你先前測 OFFSET / EXCEPT / CTE 支援度的工作)。
  4. 線上快查:臨時想看某段 SQL 的 FetchXML 長相時用 SQL2FetchXML,但別當成 ground truth。

08參考資料