共用方式為


SQL Server 與 Azure SQL Database 之間的 T-SQL 差異

資料庫 從 SQL Server 移轉至 Azure SQL Database 時,您可能會發現您的 SQL Server 資料庫需要進行一些重新工程,才能進行移轉。 本文章提供一些指引,以協助您執行此再造作業,以及了解為何必須執行再造的基礎原因。 若要偵測不相容,並將資料庫遷移至 Azure SQL Database,請使用 Azure 數據遷移服務

注意

Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。

概觀

Microsoft SQL Server 和 Azure SQL Database 都完全支援應用程式使用的大部分 Transact-SQL (T-SQL) 功能。 例如,資料類型、運算子、字串、算術、邏輯及資料指標函式等核心 SQL 元件在 SQL Server 與 SQL Database 中都以相同的方式運作。 不過,DDL (資料定義語言) 和 DML (資料操作語言) 元素中有幾個 T-SQL 差異導致對 T-SQL 陳述式和查詢僅提供部分支援 (將在本文章中稍後探討)。

此外,還有一些功能和語法完全不受支援,因為 Azure SQL Database 的設計目的是要將功能隔離,讓其不與系統資料庫和作業系統相依。 因此,SQL Database 不支援大部分的實例層級功能。 如果設定執行個體層級選項、作業系統元件或指定檔案系統組態,便無法使用 T-SQL 陳述式和選項。 當需要這類功能時,通常會從 SQL Database 或從另一個 Azure 功能或服務以其他方式提供適合的替代方案。

例如,Azure SQL Database 內建高可用性。 SQL Database 不支援與可用性群組相關的 T-SQL 語句,也不支援與 AlwaysOn 可用性群組相關的動態管理檢視。

如需 SQL Database 支援和不支援的功能清單,請參閱 功能比較:Azure SQL Database 和 Azure SQL 受控實例。 本頁面補充該文章,並著重於 T-SQL 陳述式。

具有部分差異的 T-SQL 語法陳述式

核心 DDL 語句可供使用,但不支援與不支援的功能相關的 DDL 語句延伸模組,例如磁碟上的檔案放置。

  • 在 SQL Server 中,CREATE DATABASEALTER DATABASE 陳述式具有超過三十個選項。 這些陳述式包括僅適用於 SQL Server 的檔案放置、FILESTREAM 及服務訊息代理程式選項。 如果您在移轉之前先在 SQL Database 中建立資料庫,但如果您要移轉建立資料庫的 T-SQL 程式代碼,您應該比較 CREATE DATABASE (Azure SQL Database) 與 CREATE DATABASE (SQL Server T-SQL) 上的 SQL Server 語法,以確保支援您使用的所有選項。 Azure SQL Database 的 CREATE DATABASE 也有僅適用於 SQL Database 的服務目標和彈性集區選項。
  • CREATE TABLEALTER TABLE 陳述式具有 FILETABLEFILESTREAM 選項,因為這些功能不受支援,所以無法在 SQL Database 上使用。
  • 不支援在CREATE,使用資料庫中的對應ALTERDROPmaster 語句來建立、改變或卸除用戶物件,例如數據表、檢視或預存程式。
  • CREATE LOGIN 支援和 ALTER LOGIN 語句,但不提供 SQL Server 中所有可用的選項。 為了讓您的資料庫更具可攜性,SQL Database 建議您儘可能使用自主資料庫使用者,而不要使用登入。 如需詳細資訊,請參閱 CREATE LOGINALTER LOGIN授權資料庫對 SQL Database、SQL 受控實例和 Azure Synapse Analytics 的存取權。

在 Azure SQL Database 中不支援的 T-SQL 語法

除了與功能比較中所述不支援的功能相關的 T-SQL 語句:Azure SQL Database 和 Azure SQL 受控實例之外,不支援下列語句和語句群組。 因此,如果要移轉的資料庫使用下列任何功能,請再造您的應用程式以排除這些 T-SQL 功能和陳述式。

  • 系統物件的定序。
  • 相關連接:端點陳述式。 SQL Database 不支援 Windows 驗證,但支援 Microsoft Entra 驗證。 這包括 Active Directory 主體與 Microsoft Entra 識別子同盟的驗證。 如需詳細資訊,請參閱 Microsoft Azure SQL 的 Entra 驗證
  • 使用三或四部分名稱的跨資料庫和跨執行個體查詢。 支援參考 tempdb 資料庫和目前資料庫的三部分名稱。 彈性查詢支援其他 MSSQL 資料庫中資料表的唯讀參考。
  • 跨資料庫擁有權鏈結和 TRUSTWORTHY 資料庫屬性。
  • EXECUTE AS LOGIN。 請改用 EXECUTE AS USER
  • 適用於加密金鑰的可延伸金鑰管理 (EKM)。 透明數據加密 (TDE) 客戶管理的金鑰 和 Always Encrypted 資料 行主要密鑰 可以儲存在 Azure Key Vault 中。
  • 事件服務:事件通知、查詢通知。
  • 檔案屬性:與資料庫檔案名稱、放置、大小及其他檔案屬性相關的語法是由 SQL Database 自動管理。
  • 高可用性:與高可用性和資料庫復原相關的語法,由 SQL Database 管理。 這包括備份、還原、Always On、資料庫鏡像、記錄傳送、復原模式的語法。
  • 與 SQL Database 中無法使用的快照式、交易式和合併式複寫相關的語法。 複寫訂用帳戶受支援。
  • 函式:fn_get_sqlfn_virtualfilestatsfn_virtualservernodes
  • 執行個體設定:與伺服器記憶體、背景工作執行緒、CPU 親和性、追蹤旗標相關的語法。 改為使用服務層級和計算大小。
  • KILL STATS JOB
  • OPENQUERYOPENDATASOURCE 和四部分名稱。
  • .NET Framework:Common Language Runtime (CLR) 整合
  • 語意搜尋
  • 伺服器認證:請改用資料庫範圍認證
  • 不支援伺服器層級許可權: GRANTREVOKEDENY 伺服器層級許可權。 某些伺服器層級權限會由資料庫層級權限取代,或由內建伺服器角色隱含地授與。 某些伺服器層級 DMV 和目錄檢視都有類似的資料庫層級檢視。
  • SET REMOTE_PROC_TRANSACTIONS
  • SHUTDOWN
  • sp_addmessage
  • sp_configureRECONFIGUREALTER DATABASE SCOPED CONFIGURATION 受支援。
  • sp_helpuser
  • sp_migrate_user_to_contained
  • SQL Server Agent:依賴 SQL Server Agent 或 msdb 資料庫的語法︰警示、運算子、中央管理伺服器。 改用指令碼,例如 PowerShell。
  • SQL Server 稽核:請改用 SQL Database 稽核
  • SQL Server 追蹤。
  • 追蹤旗標。
  • T-SQL 偵錯。
  • 伺服器範圍或登入觸發程序。
  • USE 陳述式:若要將資料庫內容變更為不同的資料庫,您必須建立與該資料庫的新連線。

完整 T-SQL 參考

如需 T-SQL 文法、使用方式和範例的詳細資訊,請參閱 Transact-SQL 參考 (Database Engine)

關於「適用於」標記

T-SQL 參考包含與所有最近 SQL Server 版本相關的文章。 文章標題下方是圖示列,列出 MSSQL 平台並指出適用性。 例如,可用性群組是在 SQL Server 2012 中導入。 建立可用性群組文章指出陳述式會套用至 SQL Server (從 2012 年開始)。 語句不適用於 SQL Server 2008、SQL Server 2008 R2、Azure SQL Database、Azure Synapse Analytics 或平行處理數據倉儲。

在某些情況下,文章的一般主旨可用於產品中,但產品之間會有些微的差異。 依適當情況會在文章的中間點指出差異。 例如,SQL Database 中有提供 CREATE TRIGGER 文章。 但伺服器層級觸發程序的 ALL SERVER 選項指出無法在 SQL Database 中使用伺服器層級的觸發程序。 請改用資料庫層級的觸發程序。