【发布时间】: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