將 Microsoft Dataverse 用的 T-SQL(含 TDS endpoint 語法)轉成 FetchXML 的工具、開源專案與技術文章彙整 —— 聚焦於可程式化嵌入 NL2SQL / eval pipeline 的方案。
| 資源 | 類型 | 開源 | 推薦 | 一句話 |
|---|---|---|---|---|
| SQL 4 CDS | Engine + XrmToolBox/SSMS/ADS 外掛 + NuGet | ✅ 開源 | ★★★★★ | 最完整、唯一仍積極維護 |
| SQL2FetchXML | 線上轉換器 | — | ★★★☆ | 免安裝快試,但限制多 |
| FetchXmlToSql API | Dataverse 內建(未文件化) | — | ★★★ | 反向轉換,官方途徑 |
| FetchXML Builder | XrmToolBox 外掛 | ✅ 開源 | ★★★★ | 編輯 FetchXML + 產生多種語法 |
| FetchXML Studio | Power Platform ToolBox 外掛 | ✅ 開源 | ★★★ | 視覺化建構 + SQL↔FetchXML 雙向預覽 |
| Convert queries 範例 | .NET SDK 範例 | ✅ 開源 | ★★ | FetchXML↔QueryExpression |
讓你用標準 SQL 語法查詢與操作 Dataverse / D365 的資料與 metadata,支援 SELECT / INSERT / UPDATE / DELETE。在可能時,查詢會被轉成 FetchXML —— 因此你可以用熟悉的 SQL 產生 FetchXML,再用於 plugin 或整合。
RetrieveMetadataChangesRequest / RetrieveAllOptionSetsRequest。OPENJSON、JSON_QUERY、ISJSON。RetrieveTotalRecordCountRequest 加速 SELECT count(*)、自動分頁、繞過 AggregateQueryRecordLimit。產生的 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>
MarkMpn.SQL4CDS部分查詢無法純靠 FetchXML 執行,這類會出現警告,表示需要 SQL 4 CDS 額外的記憶體內處理。這個「可否完全下推」的訊號,剛好可拿來當 eval 指標。
貼上 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-weeks → nextxweeks(n)、today → today()、eq-userid → equserid()。若運算子本身是 SQL 關鍵字(如 on、in)需加 x 前綴:
SELECT * FROM contact
WHERE createdon = xon('2011-01-11T00:00:00')
已知限制:對括號、巢狀 select 處理不佳;大小寫偶有出錯;無法處理NOT IN/NOT EXISTS/EXCEPT(多半其實是 FetchXML 本身限制)。嚴謹評估建議以 SQL 4 CDS 為主,本工具僅作快速參照、勿當 ground truth。
方向與你需求相反(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。
⚠️ 因屬未文件化功能,無保證持續可用,正式產品不建議依賴。
對 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 編輯,反之亦可。
Power Platform ToolBox 生態系的開源視覺化 FetchXML 建構器。主要用途是編寫 FetchXML,但整合了 §03 提到的未文件化 FetchXMLToSQL API,提供 SQL ↔ FetchXML 雙向預覽,可當作語法對照時的另一個快速工具。
文件:learn.microsoft.com — Convert queries sample
示範用 QueryExpressionToFetchXmlRequest 與 FetchXmlToQueryExpressionRequest 雙向轉換。雖非 T-SQL→FetchXML,但若 pipeline 已用 QueryExpression 作中介層,這是官方支援的轉換路徑。
SQL 4 CDS 原作者本人的部落格,是這個主題最深入的技術來源。詳述 TDS Endpoint 底層、把 cursor、UNION hint、大量 UPDATE 等較難語法轉成 FetchXML 的內部實作與效能優化心得,是想理解 §01 engine 行為時的第一手材料。
Microsoft MVP 從企業架構師視角介紹如何用既有 SQL 知識,透過開源工具快速縮短上手 Dataverse FetchXML 的曲線,含實務維運腳本範例。適合決策層與初次接觸 Dataverse 的 SQL 老手。
社群經典的「思維轉換」教學。示範用早期 KingswaySoft 的 sql2fetchxml.com 線上服務,把常見 Inner / Left Join 與篩選條件對應到 FetchXML 的 <link-entity> 與 <filter> 節點 —— 文章雖舊,對建立心智模型仍很有用。
MarkMpn.SQL4CDS engine NuGet,把模型產生的 T-SQL 餵進去轉 FetchXML,並比對是否「可完全下推」(fully foldable) 作為一個 eval 指標。FetchXMLToSql Custom API 觸發方式說明.