【问题标题】:How do I use SMO to transfer database to new schema?如何使用 SMO 将数据库转移到新架构?
【发布时间】:2014-10-17 07:35:27
【问题描述】:

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

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

【问题讨论】:

  • 你有两个选择:要么给 schema_user1 它需要的权限,要么创建一个新用户来运行这个工具并给 那个 用户它需要的权限。你现在要求的就像是说“我想让这个人能够穿过这扇锁着的门,但不想给他们钥匙。”
  • 即使我授予 schema_user1 权限(或使用具有所有权限的用户),数据库也会转移到“dbo”,我想知道是否可以将其转移到新模式。跨度>
  • 当然。在这种情况下,请将您希望的架构指定为新用户的默认架构。

标签: c# sql-server smo


【解决方案1】:

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

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

【讨论】:

    最近更新 更多