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

移轉您的資料庫從 SQL Server 至 Azure SQL Database 時,您可能會發現您的 SQL Server 資料庫必須先進行一些再造,才能移轉。 本文章提供一些指引,以協助您執行此再造作業,以及了解為何必須執行再造的基礎原因。 若要偵測不相容並將資料庫移轉至 Azure SQL Database,請使用 Data Migration Assistant (DMA)

概觀

Microsoft SQL Server 和 Azure SQL Database 都支援應用程式使用的大部分 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 陳述式,也不支援與「Always On 可用性群組」相關的動態管理檢視。

如需 SQL Database 所支援和不支援的功能清單,請參閱 Azure SQL Database 功能比較。 本頁面補充該文章,並著重於 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 LOGINALTER LOGIN 陳述式受支援,但是不提供 SQL Server 中可用的所有選項。 為了讓您的資料庫更具可攜性,SQL Database 建議您儘可能使用自主資料庫使用者,而不要使用登入。 如需詳細資訊,請參閱建立登入變更登入管理登入和使用者

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

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

  • 系統物件的定序。
  • 相關連接:端點陳述式。 SQL Database 不支援 Windows 驗證,但支援 Azure Active Directory 驗證。 這包括與 Azure Active Directory 同盟 Active Directory 主體的驗證。 如需詳細資訊,請參閱使用 Azure Active Directory 驗證連線到 SQL Database 或 Azure Synapse Analytics
  • 使用三或四部分名稱的跨資料庫和跨執行個體查詢。 支援參考 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: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 文法、使用方式與範例的詳細資訊,請參閱 T-SQL 參考 (資料庫引擎)

關於「適用於」標記

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 中使用伺服器層級的觸發程序。 請改用資料庫層級的觸發程序。

後續步驟

如需 SQL Database 所支援和不支援的功能清單,請參閱 Azure SQL Database 功能比較

若要在移轉至 Azure SQL Database 之前偵測 SQL Server 資料庫中的相容性問題,以及移轉您的資料庫,請使用 Data Migration Assistant (DMA)