SQL Server 至 Azure SQL Database 移轉的評估規則

適用於:Azure SQL Database

移轉工具會執行一些評估規則來驗證您的來源 SQL Server 執行個體,以找出必須解決才能將 SQL Server 資料庫移轉至 Azure SQL 資料庫的問題。

本文提供相關的規則清單,用以評估將 SQL Server 資料庫遷移至 Azure SQL Database 的可行性。

規則摘要

規則標題 層級 類別 詳細資料
AgentJobs 執行個體 警告 SQL Server Agent 工作不適用於 Azure SQL Database。
BulkInsert 資料庫 問題 Azure SQL Database 不支援將 BULK INSERT 用於非 Azure Blob 資料來源。
ClrAssemblies 資料庫 問題 Azure SQL Database 中不支援 SQL CLR 組件。
ComputeClause 資料庫 警告 COMPUTE 子句已不受支援且已移除。
CrossDatabaseReferences 資料庫 問題 Azure SQL Database 中不支援跨資料庫查詢。
CryptographicProvider 資料庫 問題 發現有 CREATE CRYPTOGRAPHIC PROVIDER 或 ALTER CRYPTOGRAPHIC PROVIDER 的使用,這在 Azure SQL Database 中不支援。
DatabaseMail 執行個體 警告 Azure SQL Database 中不支援 Database Mail。
DatabasePrincipalAlias 資料庫 問題 SYS.DATABASE_PRINCIPAL_ALIASES 已不受支援且已移除。
DbCompatLevelLowerThan100 資料庫 警告 Azure SQL Database 不支援低於 100 的相容性層級。
DisableDefCNSTCHK 資料庫 問題 SET 選項 DISABLE_DEF_CNST_CHK 已不受支援且已移除。
FastFirstRowHint 資料庫 警告 FASTFIRSTROW 查詢提示已不受支援且已移除。
FileStream 資料庫 問題 Azure SQL 資料庫中不支援 FILESTREAM。
LinkedServer 資料庫 問題 Azure SQL Database 中不支援連結的伺服器功能。
MSDTCTransactSQL 資料庫 問題 Azure SQL Database 中不支援開始分散式交易。
NextColumn 資料庫 問題 名為 NEXT 的資料表和資料行會導致 Azure SQL 資料庫發生錯誤。
NonANSILeftOuterJoinSyntax 資料庫 警告 非 ANSI 樣式左方外部聯結已不受支援且已移除。
NonANSIRightOuterJoinSyntax 資料庫 警告 非 ANSI 樣式右方外部聯結已不受支援且已移除。
OpenRowsetWithNonBlobDataSourceBulk 資料庫 問題 Azure SQL Database 不支援將大量作業中使用的 OpenRowSet 用於非 Azure Blob 儲存體資料來源。
OpenRowsetWithSQLAndNonSQLProvider 資料庫 問題 Azure SQL Database 中不支援 SQL 或非 SQL 提供者的 OpenRowSet。
RAISERROR 資料庫 警告 舊版樣式 RAISERROR 呼叫應取代為新式對等項目。
ServerAudits 執行個體 警告 Azure SQL Database 中不支援伺服器稽核。
ServerCredentials 執行個體 警告 Azure SQL Database 中不支援伺服器範圍認證。
ServerScopedTriggers 執行個體 警告 Azure SQL Database 中不支援伺服器範圍的觸發程序。
ServiceBroker 資料庫 問題 Azure SQL Database 中不支援 Service Broker 功能。
SQLDBDatabaseSize 資料庫 問題 Azure SQL 資料庫不支援大於 100 TB 的資料庫大小。
SqlMail 資料庫 警告 SQL Mail 已中止。
SystemProcedures110 資料庫 警告 偵測到陳述式參考了已移除而無法在 Azure SQL Database 中使用的系統預存程序。
TraceFlags 執行個體 警告 Azure SQL 資料庫不支援追蹤旗標。
WindowsAuthentication 執行個體 警告 Azure SQL Database 不支援與 Windows 驗證 (整合式安全性) 對應的資料庫使用者。
XpCmdshell 資料庫 問題 Azure SQL Database 中不支援 xp_cmdshell。

BULK INSERT

標題:Azure SQL Database 不支援將 BULK INSERT 用於非 Azure Blob 資料來源。
類別:問題

說明
Azure SQL 資料庫無法存取檔案共用或 Windows 資料夾。 請參閱「受影響的物件」一節,以了解 BULK INSERT 陳述式未參考 Azure Blob 的特定用法。 物件若具有來源不是 Azure Blob 儲存體的 BULK INSERT,在移轉至 Azure SQL 資料庫後將無法運作。

建議
在移轉至 Azure SQL 資料庫時,您必須轉換使用本機檔案或檔案共用的 BULK INSERT 陳述式以改用來自 Azure Blob 儲存體的檔案。 或者,遷移至 Azure 虛擬機器上的 SQL Server。

COMPUTE 子句

標題:COMPUTE 子句已不受支援且已移除。
類別:警告

描述
COMPUTE 子句會產生在結果集結尾顯示為其他摘要資料行的總計。 不過,Azure SQL Database 已不再支援此子句。

建議
您必須改用 ROLLUP 運算子來重寫 T-SQL 模組。 下列程式碼示範如何將 COMPUTE 取代為 ROLLUP

USE AdventureWorks2022;GO;

SELECT SalesOrderID,
    UnitPrice,
    UnitPriceDiscount
FROM Sales.SalesOrderDetail
ORDER BY SalesOrderID COMPUTE SUM(UnitPrice),
    SUM(UnitPriceDiscount) BY SalesOrderID GO;

SELECT SalesOrderID,
    UnitPrice,
    UnitPriceDiscount,
    SUM(UnitPrice) AS UnitPrice,
    SUM(UnitPriceDiscount) AS UnitPriceDiscount
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID,
    UnitPrice,
    UnitPriceDiscount
WITH ROLLUP;

詳細資訊:SQL Server 中已中止的資料庫引擎功能

CLR 組件

標題:Azure SQL Database 中不支援 SQL CLR 組件
類別:問題

說明
Azure SQL 資料庫不支援 SQL CLR 組件。

建議
這目前在 Azure SQL Database 中無法達成。 建議的替代解決方案會需要變更應用程式程式碼及資料庫,改為僅使用 Azure SQL 資料庫支援的組件。 或者,遷移至 Azure 虛擬機器上的 Azure SQL 受控執行個體或 SQL Server。

詳細資訊:SQL Database 中不支援的 Transact-SQL 差異

密碼編譯提供者

標題:發現有 CREATE CRYPTOGRAPHIC PROVIDER 或 ALTER CRYPTOGRAPHIC PROVIDER 的使用,這在 Azure SQL Database 中不支援
類別:問題

說明
Azure SQL 資料庫不支援 CRYPTOGRAPHIC PROVIDER 陳述式,因為其無法存取檔案。 請參閱「受影響的物件」一節,以了解 CRYPTOGRAPHIC PROVIDER 陳述式的特定用法。 在移轉至 Azure SQL 資料庫之後,具有或 CREATE CRYPTOGRAPHIC PROVIDERALTER CRYPTOGRAPHIC PROVIDER 物件將無法正常運作。

建議
使用 CREATE CRYPTOGRAPHIC PROVIDERALTER CRYPTOGRAPHIC PROVIDER 來檢查物件。 如果需要任何這類物件,請移除這些功能的使用。 或者,遷移至 Azure 虛擬機器上的 SQL Server。

跨資料庫參考

標題:Azure SQL Database 中不支援跨資料庫查詢
類別:問題

描述
此伺服器上的資料庫使用跨資料庫查詢,Azure SQL Database 中不支援此查詢。

建議
Azure SQL 資料庫不支援跨資料庫查詢。 建議使用下列動作:

  • 將相依資料庫移轉至 Azure SQL 資料庫,並使用彈性資料庫查詢 (目前為預覽版) 功能來跨 Azure SQL 資料庫查詢。
  • 將相依資料集從其他資料庫移至正在遷移的資料庫。
  • 遷移至 Azure SQL 受控執行個體。
  • 遷移至 Azure 虛擬機器上的 SQL Server。

詳細資訊:檢查 Azure SQL Database 彈性資料庫查詢 (預覽版)

資料庫相容性

標題:Azure SQL Database 不支援低於 100 的相容性層級。
類別:警告

說明
資料庫相容性層級是協助資料庫現代化的重要工具,它允許升級 SQL Server 資料庫引擎,同時透過維護升級前的相同資料庫相容性層級,讓連線的應用程式保持在運作狀態。 Azure SQL Database 不支援低於 100 的相容性層級。

建議
在 Azure SQL 受控執行個體上的資料庫相容性層級升級至 100 時,評估應用程式功能是否完整。 或者,遷移至 Azure 虛擬機器上的 SQL Server。

Database Mail

標題:Azure SQL Database 中不支援 Database Mail。
類別:警告

描述
此伺服器使用 Azure SQL Database 不支援的 Database Mail 功能。

建議
請考慮遷移至支援 Database Mail 的 Azure SQL 受控執行個體。 或者,請考慮使用 Azure 函式和 SendGrid 來完成 Azure SQL 資料庫的郵件功能。

資料庫主體別名

標題:SYS.DATABASE_PRINCIPAL_ALIASES 已不受支援且已移除。
類別:問題

描述
SYS.DATABASE_PRINCIPAL_ALIASES 在 Azure SQL Database 中已不受支援且已移除。

建議
請使用角色,而非別名。

詳細資訊:SQL Server 中已中止的資料庫引擎功能

DISABLE_DEF_CNST_CHK 選項

標題:SET 選項 DISABLE_DEF_CNST_CHK 已中止且已移除。
類別:問題

描述
SET 選項 DISABLE_DEF_CNST_CHK 在 Azure SQL Database 中已中止並已移除。

詳細資訊:SQL Server 中已中止的資料庫引擎功能

FASTFIRSTROW 提示

標題:FASTFIRSTROW 查詢提示已不受支援且已移除。
類別:警告

描述
FASTFIRSTROW 查詢提示在 Azure SQL Database 中已不受支援且已移除。

建議
不要使用 FASTFIRSTROW 查詢提示,而改用 OPTION (FAST n)。

詳細資訊:SQL Server 中已中止的資料庫引擎功能

FILESTREAM

標題:Azure SQL 資料庫中不支援 FILESTREAM
類別:問題

描述
Azure SQL 資料庫不支援可讓您在 NTFS 檔案系統中儲存非結構化資料 (例如文字文件、影像和影片) 的 FILESTREAM 功能。

建議
在 Azure SQL Database 中將非結構化檔案上傳至 Azure Blob 儲存體,並儲存與這些檔案相關的中繼資料 (名稱、類型、URL 位置、儲存體金鑰等)。 您可能必須重新設計您的應用程式,以啟用對 Azure SQL Database 輸入和輸出 Blob 的功能。 或者,遷移至 Azure 虛擬機器上的 SQL Server。

詳細資訊:對 Azure SQL 輸入和輸出 Blob 的部落格

連結的伺服器

標題:Azure SQL Database 中不支援連結的伺服器功能
類別:問題

描述
連結的伺服器可讓 SQL Server 資料庫引擎對 SQL Server 執行個體以外的 OLE DB 資料來源執行命令。

建議
Azure SQL 資料庫不支援連結的伺服器功能。 建議您執行下列動作,以免除連結伺服器的需求:

  • 從遠端 SQL 伺服器找出相依資料集,並考慮將其移至要遷移的資料庫。
  • 將相依資料庫移轉至 Azure,並在 Azure SQL 資料庫中使用彈性資料庫查詢 (預覽版) 功能來跨資料庫進行查詢。

詳細資訊:檢查 Azure SQL 資料庫彈性查詢 (預覽版)

MS DTC

標題:Azure SQL Database 中不支援開始分散式交易。
類別:問題

描述
Azure SQL Database 中不支援由 Transact SQL BEGIN DISTRIBUTED TRANSACTION 啟動,並且由 Microsoft 分散式交易協調器 (MS DTC) 管理的分散式交易。

建議
檢閱 Azure Migrate 中的 [受影響的物件] 區段,以查看所有使用 BEGIN DISTRUBUTED TRANSACTION 的物件。 請考慮將參與者資料庫移轉至支援跨多個執行個體的分散式交易的 Azure SQL 受控執行個體。 若需詳細資訊,請見 Azure SQL 受控執行個體的跨多個伺服器的交易

或者,遷移至 Azure 虛擬機器上的 SQL Server。

OPENROWSET (bulk)

標題:Azure SQL Database 不支援將大量作業中使用的 OpenRowSet 用於非 Azure Blob 儲存體資料來源。
類別:問題

描述 OPENROWSET 支援透過內建 BULK 提供者執行大量作業,可讓檔案資料被讀取,並且當做資料列集傳回。 Azure SQL Database 中不支援將 OPENROWSET 用於非 Azure Blob 儲存體資料來源。

建議
Azure SQL 資料庫無法存取檔案共用及 Windows 資料夾,因此必須從 Azure Blob 儲存體匯入檔案。 因此,OPENROWSET 函式中僅支援 Blob 類型 DATASOURCE。 或者,遷移至 Azure 虛擬機器上的 SQL Server

詳細資訊:解決移轉至 SQL Database 期間的 Transact-SQL 差異

OPENROWSET (提供者)

標題:Azure SQL Database 中不支援 SQL 或非 SQL 提供者的 OpenRowSet。
類別:問題

描述
SQL 或非 SQL 提供者的 OpenRowSet 是存取連結伺服器資料表的另一個方法,而且是使用 OLE DB 來連接和存取遠端資料的單次特定方法。 Azure SQL Database 中不支援 SQL 或非 SQL 提供者的 OpenRowSet。

建議
Azure SQL Database 僅在從 Azure Blob 儲存體匯入時支援 OPENROWSET。 或者,遷移至 Azure 虛擬機器上的 SQL Server。

詳細資訊:解決移轉至 SQL Database 期間的 Transact-SQL 差異

非 ANSI 左方外部聯結

標題:非 ANSI 樣式左方外部聯結已不受支援且已移除。
類別:警告

描述
非 ANSI 樣式左方外部聯結在 Azure SQL Database 中已不受支援且已移除。

建議
使用 ANSI 聯結語法。

詳細資訊:SQL Server 中已中止的資料庫引擎功能

非 ANSI 右方外部聯結

標題:非 ANSI 樣式右方外部聯結已不受支援且已移除。
類別:警告

描述
非 ANSI 樣式右方外部聯結在 Azure SQL Database 中已不受支援且已移除。

建議
使用 ANSI 聯結語法。

詳細資訊:SQL Server 中已中止的資料庫引擎功能

下一個資料行

標題:名為 NEXT 的資料表和資料行會導致 Azure SQL Database 發生錯誤。
類別:問題

描述
偵測到名為 NEXT 的資料表或資料行。 在 Microsoft SQL Server 中導入的序列會使用 ANSI 標準 NEXT VALUE FOR 函式。 如果某個資料表或資料行名為 NEXT,而且資料行的別名為 VALUE,當您省略 ANSI 標準 AS 時,產生的陳述式可能會導致錯誤。

建議
設定資料表或資料行的別名時,請將陳述式重寫為包含 ANSI 標準 AS 關鍵字。 例如,如果某個資料行的名稱為 NEXT,且其別名為 VALUE,則查詢 SELECT NEXT VALUE FROM TABLE 會導致錯誤,而應重寫為 SELECT NEXT AS VALUE FROM TABLE。 同樣地,當某個資料表名為 NEXT,而且該資料表的別名為 VALUE 時,SELECT Col1 FROM NEXT VALUE 查詢將會導致錯誤,所以應該重寫為 SELECT Col1 FROM NEXT AS VALUE

RAISERROR

標題:舊版樣式 RAISERROR 呼叫應取代為新式對等項目。
類別:警告

說明
類似於下列範例的 RAISERROR 呼叫稱為舊版樣式,因為其中不包含逗號和括弧。 RAISERROR 50001 'this is a test'. 這個呼叫 RAISERROR 的方法在 Azure SQL Database 中已不受支援且已移除。

建議
使用目前的 RAISERROR 語法重寫陳述式,或評估新式方法 BEGIN TRY { } END TRY BEGIN CATCH { THROW; } END CATCH 是否可行。

詳細資訊:SQL Server 中已中止的資料庫引擎功能

伺服器稽核

標題:使用 Azure SQL Database 稽核功能來取代伺服器稽核
類別:警告

描述
Azure SQL Database 中不支援伺服器稽核。

建議
請考慮以 Azure SQL Database 稽核功能來取代伺服器稽核。 Azure SQL 可支援稽核,且功能比 SQL Server 更豐富。 Azure SQL Database 可以稽核各種資料庫動作和事件,包括:存取資料、結構描述變更 (DDL)、資料變更 (DML)、帳戶、角色和權限 (DCL、安全性例外狀況)。 Azure SQL Database 稽核可提高組織的能力,以深入探索其資料庫內所發生的事件和變更,包括對資料的更新和查詢。 或者,遷移至 Azure 虛擬機器上的 Azure SQL 受控執行個體或 SQL Server。

詳細資訊:Azure SQL Database 的稽核

伺服器認證

標題:Azure SQL Database 中不支援伺服器範圍認證
類別:警告

描述
認證是包含驗證資訊 (認證) 的記錄,該項資訊是連線到 SQL Server 外部資源時所需的資訊。 Azure SQL Database 支援資料庫認證,但不支援在 SQL Server 範圍建立的認證。

建議
Azure SQL Database 支援資料庫範圍認證。 將伺服器範圍認證轉換為資料庫範圍認證。 或者,遷移至 Azure 虛擬機器上的 Azure SQL 受控執行個體或 SQL Server。

詳細資訊:建立資料庫範圍認證

Service Broker

標題:Azure SQL Database 中不支援 Service Broker 功能
類別:問題

描述
SQL Server Service Broker 提供在 SQL Server 資料庫引擎中對應用程式傳訊及將其排入佇列的原生支援。 Azure SQL Database 中不支援 Service Broker 功能。

建議
Azure SQL Database 中不支援 Service Broker 功能。 請考慮遷移至 Azure SQL 受控執行個體,其可在相同執行個體內支援 Service Broker。 或者,遷移至 Azure 虛擬機器上的 SQL Server。

伺服器範圍觸發程序

標題:Azure SQL Database 中不支援伺服器範圍的觸發程序
類別:警告

說明
觸發程序是種特殊的預存程序,可執行以回應資料表上的特定動作,例如插入、刪除或更新資料。 Azure SQL Database 中不支援伺服器範圍的觸發程序。 Azure SQL 資料庫不支援下列觸發程序的選項:FOR LOGON、ENCRYPTION、WITH APPEND、NOT FOR REPLICATION、EXTERNAL NAME 選項 (沒有外部方法支援)、ALL SERVER 選項 (DDL 觸發程序)、在 LOGON 事件上觸發 (登入觸發程序),Azure SQL 資料庫不支援 CLR 觸發程序。

建議
請改用資料庫層級的觸發程序。 或者,遷移至 Azure 虛擬機器上的 Azure SQL 受控執行個體或 SQL Server。

詳細資訊:解決移轉至 SQL Database 期間的 Transact-SQL 差異

SQL Agent 作業

標題:SQL Server Agent 工作不適用於 Azure SQL Database
類別:警告

描述
SQL Server Agent 是 Microsoft Windows 服務,會執行排程的管理工作 (在 SQL Server 中稱為「作業」(Job))。 SQL Server Agent 工作不適用於 Azure SQL Database。

建議
使用彈性作業 (預覽),其為 Azure SQL 資料庫中 SQL Server Agent 作業的取代方案。 Azure SQL Database 的彈性資料庫工作可讓您跨越多個資料庫可靠地執行 T-SQL 指令碼,同時自動重試並提供最終完成保證。 或者,請考慮遷移至 Azure 虛擬機器上的 Azure SQL 受控執行個體或 SQL Server。

詳細資訊:開始使用彈性資料庫工作 (預覽)

SQL Database 大小

標題:Azure SQL Database 不支援大於 100 TB 的資料庫大小。
類別:問題

描述
資料庫的大小大於支援的大小上限 100 TB。

建議
評估資料是否可封存、壓縮或分區至多個資料庫。 或者,遷移至 Azure 虛擬機器上的 SQL Server。

詳細資訊:虛擬核心資源限制

SQL Mail

標題:SQL Mail 已中止。
類別:警告

描述
SQL Mail 已停止,並已從 Azure SQL Database 中移除。

建議
請考慮遷移至 Azure 虛擬機器上的 Azure SQL 受控執行個體或 SQL Server 並使用 Database Mail。

詳細資訊:SQL Server 中已中止的資料庫引擎功能

SystemProcedures110

標題:偵測到陳述式參考了已移除而無法在 Azure SQL Database 中使用的系統預存程序。
類別:警告

說明
下列不支援的系統和擴充預存程序無法在 Azure SQL 資料庫中使用 - sp_dboptionsp_addserversp_dropaliassp_activedirectory_objsp_activedirectory_scpsp_activedirectory_start

建議
移除對不受支援、且已從 Azure SQL Database 中移除的系統程序的參考。

詳細資訊:SQL Server 中已中止的資料庫引擎功能

追蹤旗標

標題:Azure SQL Database 不支援追蹤旗標
類別:警告

描述
追蹤旗標用來暫時設定特定伺服器性質,或關閉特定行為。 追蹤旗標經常用來診斷效能問題,或偵錯預存程序或複雜電腦系統。 Azure SQL 資料庫不支援追蹤旗標。

建議
檢閱 Azure Migrate 中的 [受影響的物件] 區段,以查看 Azure SQL 資料庫中不支援的所有追蹤旗標,並評估這些旗標是否可移除。 或者,遷移至 Azure SQL 受控執行個體,其支援有限數量的全域追蹤旗標,或遷移至 Azure 虛擬機器上的 SQL Server。

詳細資訊:解決移轉至 SQL Database 期間的 Transact-SQL 差異

Windows 驗證

標題:Azure SQL Database 不支援與 Windows 驗證 (整合式安全性) 對應的資料庫使用者。
類別:警告

說明
Azure SQL 資料庫支援兩種驗證類型:

  • SQL 驗證:使用使用者名稱和密碼
  • Microsoft Entra 驗證使用由 Microsoft Entra ID (之前稱為 Azure Active Directory) 管理的身分識別,並且受控網域和整合式網域都支援此驗證。

Azure SQL Database 不支援與 Windows 驗證 (整合式安全性) 對應的資料庫使用者。

建議
將本機 Active Directory 與 Microsoft Entra ID 同盟。 然後,Windows 身分識別可以取代為對等的 Microsoft Entra 身分識別。 或者,遷移至 Azure 虛擬機器上的 SQL Server。

詳細資訊:SQL Database 安全性功能

XP_cmdshell

標題:Azure SQL 資料庫不支援 xp_cmdshell
類別:問題

說明
Azure SQL 資料庫不支援會繁衍 Windows 命令殼層,並傳入字串以執行的 xp_cmdshell

建議
檢閱 Azure Migrate 中的 [受影響的物件] 區段,以查看所有使用 xp_cmdshell 的物件,並評估 xp_cmdshell 的參考或受影響的物件是否可移除。 也請考慮探索可提供雲端式自動化和設定服務的 Azure 自動化。 或者,遷移至 Azure 虛擬機器上的 SQL Server。