建立及執行含有 EXECUTE AS 子句的中繼資料 SQL Server 遷移工作

總覽

SQL Server 遷移作業不會遷移資料庫使用者和伺服器登入資料。因此,如果來源包含使用者透過 EXECUTE AS '[database_user_name]' 子句定義的物件,就不會遷移至新的 Cloud SQL 副本,因為使用者尚未在該副本中存在。因此,整體遷移程序會失敗。

例如:

CREATE OR ALTER PROCEDURE dbo.example
WITH EXECUTE AS 'some_user'
AS BEGIN
…
END

由於 some_user 使用者無法遷移,因此這個儲存程序不會遷移。這是因為使用者不在目標資料庫中。

如要找出在來源資料庫中使用 EXECUTE AS '[database_user_name]' 子句的物件,請使用這些查詢,並檢查目的地資料庫中是否有這些物件的使用者。

SELECT s.name AS schema_name, o.name AS object_name, p.name AS user_name
FROM sys.sql_modules m  
INNER JOIN sys.objects o ON o.object_id = m.object_id
INNER JOIN sys.schemas s ON s.schema_id = o.schema_id
INNER JOIN sys.database_principals p ON p.principal_id = m.execute_as_principal_id

如要從包含這類中繼資料的來源執行遷移工作,請先在目的地 Cloud SQL 執行個體上建立使用者,再開始執行遷移工作。