SQL Server 至 Azure SQL Database 移轉的評估規則
適用於:Azure SQL 資料庫
移轉工具會執行一些評估規則來驗證您的來源 SQL Server 執行個體,以找出必須解決才能將 SQL Server 資料庫移轉至 Azure SQL 資料庫的問題。
本文提供相關的規則清單,用以評估將 SQL Server 資料庫遷移至 Azure SQL Database 的可行性。
規則摘要
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 VM 上的 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 PROVIDER
的 ALTER CRYPTOGRAPHIC PROVIDER
物件將無法正常運作。
建議
使用 CREATE CRYPTOGRAPHIC PROVIDER
或 ALTER CRYPTOGRAPHIC PROVIDER
來檢查物件。 如果需要任何這類物件,請移除這些功能的使用。 或者,移轉至 Azure VM 上的 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 VM 上的 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 VM 上的 SQL Server。
如需詳細資訊,請參閱對 Azure SQL 輸入和輸出 Blob 的部落格。
連結的伺服器
標題:Azure SQL Database 中不支援連結的伺服器功能
類別:問題
描述
連結的伺服器可讓 SQL Server 資料庫引擎對 SQL Server 執行個體以外的 OLE DB 資料來源執行命令。
建議
Azure SQL 資料庫不支援連結的伺服器功能。 建議您執行下列動作,以免除連結伺服器的需求:
- 從遠端 SQL 伺服器找出相依資料集,並考慮將其移至要遷移的資料庫。
- 將相依資料庫移轉至 Azure,並在 Azure SQL 資料庫中使用彈性資料庫查詢 (預覽版) 功能來跨資料庫進行查詢。
如需詳細資訊,請參閱 Azure SQL Database 彈性查詢概觀 (預覽)。
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 VM 上的 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 VM 上的 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 資料庫和 Azure Synapse Analytics 的稽核。
伺服器認證
標題:Azure SQL Database 中不支援伺服器範圍認證
類別:警告
描述
認證是包含驗證資訊 (認證) 的記錄,該項資訊是連線到 SQL Server 外部資源時所需的資訊。 Azure SQL Database 支援資料庫認證,但不支援在 SQL Server 範圍建立的認證。
建議
Azure SQL Database 支援資料庫範圍認證。 將伺服器範圍認證轉換為資料庫範圍認證。 或者,移轉至 Azure 虛擬機器上的 Azure SQL 受控執行個體或 SQL Server。
如需詳細資訊,請參閱 CREATE DATABASE SCOPED CREDENTIAL
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 VM 上的 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 資料庫的彈性工作可讓您跨越多個資料庫可靠地執行 T-SQL 指令碼,同時自動重試並提供最終完成保證。 或者,請考慮遷移至 Azure 虛擬機器上的 Azure SQL 受控執行個體或 SQL Server。 如需詳細資訊,請參閱 Azure SQL 資料庫中的彈性作業。
SQL Database 大小
標題:Azure SQL 資料庫不支援大於 100 TB 的資料庫大小。
類別:問題
描述
資料庫的大小大於支援的大小上限 100 TB。
建議
評估資料是否可封存、壓縮或分區至多個資料庫。 或者,移轉至 Azure VM 上的 SQL Server。
如需詳細資訊,請參閱 vCore 資源限制。
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_dboption
、sp_addserver
、sp_dropalias
、sp_activedirectory_obj
、sp_activedirectory_scp
和 sp_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 VM 上的 SQL Server。
如需詳細資訊,請參閱 SQL 資料庫安全性功能。
xp_cmdshell
標題:Azure SQL Database 中不支援 xp_cmdshell。
類別:問題
說明
Azure SQL 資料庫不支援會繁衍 Windows 命令殼層,並傳入字串以執行的 xp_cmdshell
。
建議
檢閱 Azure Migrate 中的 [受影響的物件] 區段,以查看所有使用 xp_cmdshell
的物件,並評估 xp_cmdshell
的參考或受影響的物件是否可移除。 也請考慮探索可提供雲端式自動化和設定服務的 Azure 自動化。 或者,移轉至 Azure VM 上的 SQL Server。