创建并运行包含包含 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 实例上创建用户,然后再启动迁移作业。