如何使用SMO将数据库转移到新的模式

本文关键字:模式 转移 数据库 何使用 SMO | 更新日期: 2023-09-27 18:26:48

我想使用Microsoft.SqlServer.Management.Smo将数据库转移到一个新的数据库,但要使用一个新模式。

以下是我目前正在做的事情(我有各种选择,可以得到我想要的行为,但没有任何运气):

  var source = new Server(GetServerConnection("sa"));
  var destination = new Server(GetServerConnection("schema_user1")); 
  source.ConnectionContext.Connect();
  destination.ConnectionContext.Connect();
  var sourceDatabase = source.Databases["support"];
  var destinationDatabase = destination.Databases["schema_test"];

  var transfer = new Transfer(sourceDatabase)
  {
    CopyAllObjects = false,
    CopyAllUserDefinedDataTypes = true,
    CopyAllTables = true,
    CopyData = true,
    CopyAllStoredProcedures = true,
    PreserveDbo = false,
    PreserveLogins = false,
    DestinationServer = destination.Name,
    DestinationDatabase = destinationDatabase.Name,
    DestinationLogin = destination.ConnectionContext.Login,
    DestinationPassword = destination.ConnectionContext.Password,
    DestinationLoginSecure = false,
    Options = {ScriptSchema = false}
  };
  transfer.TransferData();

我得到以下错误:

The specified schema name "dbo" either does not exist or you do not have permission to use it.

这是因为schema_ser1没有dbo的权限(我不希望它拥有)。

如何将其传输到目标数据库上的新架构?

如何使用SMO将数据库转移到新的模式

我必须为Transfer对象指定Options.SchemaQualify = false(它指定脚本中是否必须使用架构)。

然后使用新数据库中的用户,它将在新模式中创建。