使用smo raise错误复制数据库:"用户已存在"

时间:2016-04-06 07:16:59

标签: c# smo

我尝试使用smo复制数据库,但是我收到错误:

  

"用户,群组或角色'%'已存在于当前数据库"

我的代码:

var conn = GetServerConnection();
var server = new Server(conn);

var sourceDb = server.Databases[sourceDatabase.Name];

var destinationDbName = GetNameForDatabase(dbName);

var destinationDb = new Database(server, destinationDbName);
destinationDb.Create();

var transfer = new Transfer(sourceDb) {
   DestinationDatabase = destinationDbName,
   DestinationServer = server.Name,
   DestinationLoginSecure = true,
   CopySchema = true,
   CopyAllTables = true,
   CopyData = true,
   CopyAllUsers = false,
};

transfer.Options.WithDependencies = true;
transfer.Options.ContinueScriptingOnError = true;
transfer.TransferData();

提前感谢任何建议!

1 个答案:

答案 0 :(得分:0)

您是否有从数据库服务器到源数据库的映射?在尝试复制之前尝试删除它们。

我正在使用“复制数据库”向导复制数据库,以便在同一服务器上创建测试数据库,并出现此错误。问题是源数据库有一个映射到该数据库的用户登录名。在这一切的混合中,复制数据库向导试图通过直接副本将用户添加到目标数据库,但也通过映射添加相同的用户。诀窍是删除源数据库的映射,然后复制数据库,然后将映射添加回源(它已经在目的地添加)。