共用方式為


Azure Synapse SQL 支援的 Transact-SQL 功能

Azure Synapse SQL 是一項巨量資料分析服務,可讓您使用 T-SQL 語言來查詢和分析資料。 您可以使用 SQL Server 和 Azure SQL Database 中用於資料分析的、符合 ANSI 標準的 SQL 語言方言。

Transact-SQL 語言用於無伺服器 SQL 集區,且專用模型可以參考不同的物件,並在支援的功能集合上有一些差異。 在此頁面中,您可以找到 Synapse SQL 各種使用模式之間在 Transact-SQL 語言上的高階差異。

資料庫物件

Synapse SQL 中的使用模式可讓您使用不同的資料庫物件。 支援的物件類型比較如下表所示:

Object 專用 無伺服器
資料表 否,資料庫內的資料表不受支援。 無伺服器 SQL 集區只能查詢參考儲存在 Azure Data Lake Storage 或 Dataverse 中資料的外部資料表
檢視 。 檢視可以使用專用模型中可用的查詢語言元素 ,您可以在外部資料表、使用 OPENROWSET 函式的查詢,以及其他檢視之上建立檢視。 檢視可以使用無伺服器模型中可用的查詢語言元素
結構描述 ,支援結構描述。 使用結構描述來隔離不同的租用戶,並將其資料表放置在各自的結構描述中。
暫存資料表 暫存資料表可用來僅儲存來自系統檢視、常值或其他暫存資料表的一些資訊。 也支援對暫存資料表執行 UPDATE/DELETE。 您可以將暫存資料表與系統檢視聯結。 您無法從外部資料表選取資料並插入至暫存資料表,或將暫存資料表與外部資料表聯結,因為外部資料與暫存資料表無法在同一個查詢中混用,這些作業會失敗。
使用者定義程序 是,您可以將預存程序放置在任何使用者資料庫中 (不包含 master 資料庫)。 程序只能讀取外部資料,並使用無伺服器集區中可用的查詢語言元素
使用者定義函式 是,僅支援內嵌資料表值函式。 不支援純量使用者定義函式。
觸發程序 否,無伺服器 SQL 集區不允許變更資料,因此觸發程序無法對資料變更做出回應。
外部資料表 。 請參閱支援的資料格式 是,提供外部資料表,且可用來讀取來自 Azure Data Lake Storage 或 Dataverse 的資料。 請參閱支援的資料格式
快取查詢 是,提供多種形式 (以 SSD 為基礎的快取、記憶體內、結果集快取)。 此外,也支援具體化檢視。 否,僅會快取檔案統計資料。
結果集快取 否,不會快取查詢結果。 只會快取檔案統計資料。
具體化檢視 否,無伺服器 SQL 集區不支援具體化檢視。
資料表變數 ,請改用暫存資料表 否,不支援資料表變數。
資料表發佈項目 否,不支援資料表發佈項目。
資料表索引 否,不支援索引。
資料表分割 外部資料表不支援分割。 您可以使用 Hive 分割資料夾結構來分割檔案,並在 Spark 中建立分割資料表。 Spark 分割會與無伺服器集區同步。 如果您未使用 Spark,您可以在資料夾結構中分割檔案,並在資料夾分割結構上建立分割檢視,但無法在分割資料夾上建立外部資料表。
統計資料 是,會在外部檔案上建立統計資料。
工作負載管理、資源類別與並行控制 是,請參閱工作負載管理、資源類別與並行控制 否,您無法管理指派給查詢的資源。 無伺服器 SQL 集區會自動管理資源。
成本控制 是,使用相應放大與相應縮小動作。 是,您可以使用 Azure 入口網站或 T-SQL 程序來限制無伺服器集區的每日、每週或每月使用量。

查詢語言

Synapse SQL 中使用的查詢語言會依使用模式而在支援的功能上有所不同。 下表概述 Transact-SQL 方言中最重要的查詢語言差異:

陳述式 專用 無伺服器
SELECT 陳述式 是。 SELECT 支援 SELECT 陳述式,但不支援某些 Transact-SQL 查詢子句,例如 FOR XML/FOR JSONMATCH、OFFSET/FETCH。 是,SELECT 支援 SELECT 陳述式,但不支援某些 Transact-SQL 查詢子句,例如 FOR XMLMATCHPREDICT、GROUPNG SETS,以及查詢提示。
INSERT 陳述式 否。 使用 Spark 或其他工具將新資料上傳至 Data Lake。 針對高交易量工作負載,使用具有分析儲存體的 Azure Cosmos DB。 您可以使用 CETAS 來建立外部資料表並插入資料。
UPDATE 陳述式 否,請使用 Spark 更新 Parquet/CSV 資料,變更會自動在無伺服器集區中可用。 針對高交易量工作負載,使用具有分析儲存體的 Azure Cosmos DB。
DELETE 陳述式 否,請使用 Spark 刪除 Parquet/CSV 資料,變更會自動在無伺服器集區中可用。 針對高交易量工作負載,使用具有分析儲存體的 Azure Cosmos DB。
MERGE 陳述式 是 (預覽版) 否,請使用 Spark 合併 Parquet/CSV 資料,變更會自動在無伺服器集區中可用。
CTAS 陳述式 否,無伺服器 SQL 集區不支援 CREATE TABLE AS SELECT 陳述式。
CETAS 陳述式 是,您可以使用 CETAS 將資料初始載入至外部資料表。 是,您可以使用 CETAS 將資料初始載入至外部資料表。 CETAS 支援 Parquet 和 CSV 輸出格式。
交易 是,交易僅適用於中繼資料物件。
標籤 否,無伺服器 SQL 集區不支援標籤。
資料載入 是。 偏好的公用程式是 COPY 陳述式,但系統同時支援 BULK 載入 (BCP) 和 CETAS 來載入資料。 否,您無法將資料載入無伺服器 SQL 集區,因為資料儲存在外部儲存體上。 您可以使用 CETAS 陳述式將資料初始載入至外部資料表。
資料匯出 是。 使用 CETAS 是。 您可以使用 CETAS 將外部儲存體 (Azure Data Lake、Dataverse、Azure Cosmos DB) 中的資料匯出到 Azure Data Lake。
類型 是,支援所有 Transact-SQL 類型,但不包含 cursorhierarchyidntext、text 和 imagerowversion空間類型sql_variantxml 是,支援所有 Transact-SQL 類型,但不包含 cursorhierarchyidntext、text 和 imagerowversion空間類型sql_variantxml 與資料表類型。 請參閱如何將 Parquet 資料行類型對應到 SQL 類型
跨資料庫查詢 是,支援跨資料庫查詢與三段式名稱參考,包括 USE 陳述式。 查詢可以參考同一個工作區中的無伺服器 SQL 資料庫或 Lake 資料庫。 不支援跨工作區查詢。
內建/系統函式 (分析) 是,支援所有 Transact-SQL 分析、轉換、日期與時間、邏輯與數學函式,但不包含 CHOOSEPARSE 是,支援所有 Transact-SQL 分析、轉換、日期與時間、邏輯與數學函式。
內建/系統函式 (字串) 是。 支援所有 Transact-SQL 字串JSON 與定序函式,但不包含 STRING_ESCAPETRANSLATE 是。 支援所有 Transact-SQL 字串JSON 與定序函式。
內建/系統函式 (密碼編譯) 部分 HASHBYTES 是無伺服器 SQL 集區唯一支援的密碼編譯函式。
內建/系統資料表值函式 是,支援 Transact-SQL 資料列集函式,但不包含 OPENXMLOPENDATASOURCEOPENQUERYOPENROWSET 是,支援所有 Transact-SQL 資料列集函式,但不包含 OPENXMLOPENDATASOURCEOPENQUERY
內建/系統彙總 支援 Transact-SQL 內建彙總,但不包含 CHECKSUM_AGGGROUPING_ID 是,支援所有 Transact-SQL 內建彙總
運算子 是,支援所有 Transact-SQL 運算子,但不包含 !>!< 是,支援所有 Transact-SQL 運算子
控制流程 是。 支援所有 Transact-SQL 控制流程陳述式,但不包含 CONTINUEGOTORETURNUSEWAITFOR 是。 支援所有 Transact-SQL 控制流程陳述式。 不支援在 WHILE (...) 條件中使用 SELECT 查詢。
DDL 陳述式 (CREATE、ALTER、DROP) 是。 支援適用於受支援物件類型的所有 Transact-SQL DDL 陳述式。 是,支援適用於受支援物件類型的所有 Transact-SQL DDL 陳述式。

安全性

Synapse SQL 集區可讓您使用內建安全性功能來保護資料並控制存取。 下表比較 Synapse SQL 使用模式之間的高階差異。

功能 專用 無伺服器
登入 N/A (資料庫中僅支援包含的使用者) 是,支援伺服器層級的 Microsoft Entra ID 登入與 SQL 登入。
使用者 N/A (資料庫中僅支援包含的使用者) 是,支援資料庫使用者。
包含的使用者 是。 注意:僅允許一個 Microsoft Entra 使用者作為不受限制的系統管理員 否,不支援包含的使用者。
SQL 使用者名稱/密碼驗證 是,使用者可以使用其使用者名稱和密碼來存取無伺服器 SQL 集區。
Microsoft Entra 驗證 是,Microsoft Entra 使用者 是,Microsoft Entra 登入與使用者可以使用其 Microsoft Entra 身分識別來存取無伺服器 SQL 集區。
儲存體 Microsoft Entra 直通驗證 是,Microsoft Entra 直通驗證適用於 Microsoft Entra 登入。 如果未指定認證,系統會將 Microsoft Entra 使用者的身分識別傳遞至儲存體。 SQL 使用者無法使用 Microsoft Entra 直通驗證。
儲存體共用存取簽章 (SAS) 權杖驗證 是,使用 EXTERNAL DATA SOURCE 中的 DATABASE SCOPED CREDENTIAL 搭配共用存取簽章權杖,或使用執行個體層級的 CREDENTIAL 搭配共用存取簽章
儲存體存取金鑰驗證 是,在 EXTERNAL DATA SOURCE 中使用 DATABASE SCOPED CREDENTIAL 否,請改用 SAS 權杖,而不要使用儲存體存取金鑰。
儲存體受控識別驗證 是,使用 受控服務識別認證 是,查詢可以使用工作區的受控識別認證來存取儲存體。
儲存體應用程式身分識別/服務主體 (SPN) 驗證 是,您可以使用服務主體應用程式 ID 建立認證,用來向儲存體進行驗證。
伺服器角色 是,支援 sysadmin、public 和其他伺服器角色。
伺服器層級認證 是,OPENROWSET 函式在未使用明確資料來源時會使用伺服器層級認證
權限 - 伺服器層級 是,例如 CONNECT ANY DATABASESELECT ALL USER SECURABLES 可讓使用者讀取任何資料庫中的資料。
資料庫角色 是,您可以使用 db_ownerdb_datareaderdb_ddladmin 角色。
資料庫範圍認證 是,用於外部資料來源。 是,資料庫範圍認證可用於外部資料來源,以定義儲存體驗證方法
權限 - 資料庫層級 是,您可以對資料庫物件授與、拒絕或撤銷權限。
權限 - 結構描述層級 是,包括可對結構描述的使用者/登入授與、拒絕與撤銷權限的能力。 是,您可以指定結構描述層級權限,包括可對結構描述的使用者/登入授與、拒絕與撤銷權限的能力。
權限 - 物件層級 是,包括可對使用者授與、拒絕與撤銷權限的能力。 是,您可以對受支援的系統物件之使用者/登入授與、拒絕與撤銷權限。
權限 - 資料行層級安全性 無伺服器 SQL 集區支援針對檢視的資料行層級安全性,但不支援外部資料表。 若是外部資料表,您可以在外部資料表之上建立邏輯檢視,然後套用資料行層級安全性。
資料列層級安全性 否,沒有內建的資料列層級安全性支援。 請使用自訂檢視作為替代方案
資料遮罩 否,無伺服器 SQL 集區不支援內建資料遮罩。 請使用包裝 SQL 檢視來明確遮罩部分資料行作為替代方案。
內建/系統安全性與身分識別函式 部分 Transact-SQL 安全性函式與運算子:CURRENT_USERHAS_DBACCESSIS_MEMBERIS_ROLEMEMBERSESSION_USERSUSER_NAMESUSER_SNAMESYSTEM_USERUSERUSER_NAMEEXECUTE ASOPEN/CLOSE MASTER KEY 支援部分 Transact-SQL 安全性函式與運算子:CURRENT_USERHAS_DBACCESSHAS_PERMS_BY_NAMEIS_MEMBERIS_ROLEMEMBERIS_SRVROLEMEMBERSESSION_USERSESSION_CONTEXTSUSER_NAMESUSER_SNAMESYSTEM_USERUSERUSER_NAMEEXECUTE AS,以及 REVERT。 安全性函式無法用來查詢外部資料 (將結果儲存在變數中,再在查詢中使用)。
透明資料加密 (TDE) 否,不支援透明資料加密。
資料探索與分類 否,不支援資料探索與分類。
弱點評量 否,弱點評量不可用。
進階威脅防護 否,不支援進階威脅防護。
稽核 是,無伺服器 SQL 集區支援稽核
防火牆規則 是,可以在無伺服器 SQL 端點上設定防火牆規則。
私人端點 是,可以在無伺服器 SQL 集區上設定私人端點。

專用 SQL 集區和無伺服器 SQL 集區都使用標準 Transact-SQL 語言來查詢資料。 如需深入了解差異,請參閱 Transact-SQL 語言參考

平台功能

功能 專用 無伺服器
調整大小 無伺服器 SQL 集區會依工作負載自動調整規模。
暫停/繼續 無伺服器 SQL 集區在未使用時會自動停用,並在需要時啟用。 不需要使用者採取動作。
資料庫備份 否。 資料儲存在外部系統 (ADLS、Cosmos DB) 中,因此請確保您在來源端進行資料備份。 請確保您將 SQL 中繼資料 (資料表、檢視、程序定義,以及使用者權限) 儲存在原始檔控制中。 Lake 資料庫中的資料表定義儲存在 Spark 中繼資料中,因此請確保您也將 Spark 資料表定義保留在原始檔控制中。
資料庫還原 否。 資料儲存在外部系統 (ADLS、Cosmos DB) 中,因此您需要復原來源系統才能取回資料。 請確保您的 SQL 中繼資料 (資料表、檢視、程序定義,以及使用者權限) 位於原始檔控制中,以便您能重新建立 SQL 物件。 Lake 資料庫中的資料表定義儲存在 Spark 中繼資料中,因此請確保您也將 Spark 資料表定義保留在原始檔控制中。

工具

您可以使用各種工具連線到 Synapse SQL 來查詢資料。

工具 專用 無伺服器
Synapse 工作室 是,SQL 指令碼 是,Synapse Studio 中可以使用 SQL 指令碼。 如果你回傳大量資料,建議使用 SSMS 或 Visual Studio Code 代替 Synapse Studio。
Power BI 是,您可以使用 Power BI 在無伺服器 SQL 集區上建立報表。 建議使用匯入模式進行報表製作。
Azure Analysis Service 是,您可以使用無伺服器 SQL 集區在 Azure Analysis Service 中載入資料。
SQL Server Management Studio (SSMS) 是的,你可以 使用 SQL Server Management Studio 查詢無伺服器的 SQL 池。 SSMS 只會顯示無伺服器 SQL 集區中可用的物件。
適用於 Visual Studio Code 的 msSQL 擴充功能 是的,你可以 用 Visual Studio Code 查詢無伺服器的 SQL 池。 支援 SQL 指令碼與 SQL 筆記本。 Visual Studio Code 僅顯示無伺服器 SQL 池中可用的物件。

附註

您可以使用 SSMS 連線到無伺服器 SQL 集區並查詢。 從版本 18.5 起提供部分支援,您只能用來連線與查詢。

大多數使用標準 Transact-SQL 語言的應用程式都可以查詢 Synapse SQL 的專用與無伺服器使用模式。

資料存取

分析的資料可儲存在各種儲存體類型上。 下表列出所有可用的儲存體選項:

儲存體類型 專用 無伺服器
內部儲存體 否,資料會放在 Azure Data Lake 或 Azure Cosmos DB 分析儲存體中。
Azure Data Lake v2 是,您可以使用外部資料表和 OPENROWSET 函式從 ADLS 讀取資料。 在此了解如何設定存取控制
Azure Blob 儲存體 是,您可以使用外部資料表和 OPENROWSET 函式從 Azure Blob 儲存體讀取資料。 在此了解如何設定存取控制
Azure SQL/SQL Server (遠端) 否,無伺服器 SQL 集區無法參考 Azure SQL Database。 您可以使用彈性查詢連結的伺服器,從 Azure SQL 參考無伺服器 SQL 集區。
Dataverse 否,您可以在無伺服器 SQL 集區 (透過 ADLS) 使用 Azure Synapse Link 或 Spark,將 Azure Cosmos DB 資料載入專用集區 是,您可以搭配 Azure Data Lake 使用 Azure Synapse Link for Dataverse 來讀取 Dataverse 資料表。
Azure Cosmos DB 交易式儲存體 否,您無法存取 Azure Cosmos DB 容器來更新資料,或從 Azure Cosmos DB 交易式儲存體讀取資料。 使用 Spark 集區來更新 Azure Cosmos DB 交易式儲存體。
Azure Cosmos DB 分析儲存體 否,您可以在無伺服器 SQL 集區 (透過 ADLS) 使用 Azure Synapse Link、ADF、Spark 或其他載入工具,將 Azure Cosmos DB 資料載入專用集區 是,您可以使用 Azure Synapse Link查詢 Azure Cosmos DB 分析儲存體
Apache Spark 資料表 (工作區內) 是,無伺服器集區可以使用中繼資料同步來讀取 PARQUET 和 CSV 資料表。
Apache Spark 資料表 (遠端) 否,無伺服器集區只能存取在同一個 Synapse 工作區中、於 Apache Spark 集區建立的 PARQUET 和 CSV 資料表。 不過,您可以手動建立外部資料表來參考外部 Spark 資料表的位置。
Databricks 資料表 (遠端) 否,無伺服器集區只能存取在同一個 Synapse 工作區中、於 Apache Spark 集區建立的 PARQUET 和 CSV 資料表。 不過,您可以手動建立外部資料表來參考 Databricks 資料表的位置。

資料格式

分析的資料可以儲存在各種儲存體格式中。 下表列出所有可分析的資料格式:

資料格式 專用 無伺服器
分隔符號 是,您可以查詢分隔符號檔案
CSV 是 (不支援多字元分隔符號) 是,您可以查詢 CSV 檔案。 為了獲得更佳效能,請使用 PARSER_VERSION 2.0,其提供更快的剖析。 如果您正在將資料列附加到 CSV 檔案,請確保您將檔案視為可附加來查詢
Parquet 是,您可以查詢 Parquet 檔案,包括具有巢狀類型的檔案。
Hive ORC 否,無伺服器 SQL 集區無法讀取 Hive ORC 格式。
Hive RC 否,無伺服器 SQL 集區無法讀取 Hive RC 格式。
JSON 是,您可以使用分隔文字格式和 T-SQL JSON 函式來查詢 JSON 檔案
Avro 否,無伺服器 SQL 集區無法讀取 Avro 格式。
三角洲湖 是,您可以查詢 delta lake 檔案,包括具有巢狀類型的檔案。
Common Data Model (CDM) 否,無伺服器 SQL 集區無法讀取使用 Common Data Model 儲存的資料。

後續步驟

如需專用 SQL 集區與無伺服器 SQL 集區最佳做法的其他資訊,請參閱下列文章: