2014-10-17 32 views
2

我想使用Microsoft.SqlServer.Management.Smo將數據庫傳輸到新的數據庫,但使用新的模式。如何使用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

您有兩種選擇:爲schema_user1提供所需的權限,或者創建一個新用戶來運行該工具,併爲* *用戶提供所需的權限。你現在要求的就是說:「我想讓這個人有能力通過這個鎖着的門,但不想給他們鑰匙。」 – 2014-10-17 14:12:56

+0

即使我授予schema_user1權限(或者使用具有所有權限的用戶),數據庫也會轉移到「dbo」,我想知道是否可以將其轉移到新的模式。 – 2014-10-20 05:52:47

+0

當然。在這種情況下,指定希望模式作爲新用戶的默認模式。 – 2014-10-20 12:09:28

回答

2

我必須指定Options.SchemaQualify = false作爲Transfer對象(它指定是否必須在腳本中使用該架構)。

然後在新數據庫中使用該用戶,它將在新模式中創建。

相關問題