我想使用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的权限(我不希望它拥有)。
如何将其传输到目标数据库上的新架构?
答案 0 :(得分:2)
我必须为Options.SchemaQualify = false
对象指定Transfer
(指定是否必须在脚本中使用架构)。
然后在新数据库中使用该用户,它将在新模式中创建。