如何使用SMO将数据库传输到新架构?

时间:2014-10-17 07:35:28

标签: c# sql-server smo

我想使用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_user1没有dbo的权限(我不希望它拥有)。

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

1 个答案:

答案 0 :(得分:2)

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

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