【问题标题】:How can I transfer a single table to another database in MSSQL server using VB.NET's SMO class?如何使用 VB.NET 的 SMO 类将单个表传输到 MSSQL 服务器中的另一个数据库?
【发布时间】:2015-05-29 07:08:02
【问题描述】:

我已经可以创建一个数据库,但是当我使用下面的代码时,它会传输所有表而没有任何记录。此外,我将如何编码只传输一个特定的表?

Dim conn As New ServerConnection("NPSS-OJT", "sa", "rms")
        Dim srv As New Server(conn)
        Dim db As Database = srv.Databases("bos_primary_db")
        Dim dbCopy As Database = New Database(srv, Main.dbName)

        Dim xfr As Transfer
        xfr = New Transfer(db)
        xfr.CopyAllTables = True
        xfr.Options.WithDependencies = True
        xfr.Options.ContinueScriptingOnError = True
        xfr.DestinationDatabase = dbCopy.Name
        xfr.DestinationServer = srv.Name
        xfr.DestinationLoginSecure = True
        xfr.CopySchema = True
        xfr.CopyData = True

        xfr.TransferData()

更新代码:

Shared Sub transferTables()
        Dim conn As New ServerConnection("NPSS-OJT", "sa", "rms")
        Dim srv As New Server(conn)
        Dim db As Database = srv.Databases("bos_primary_db")
        Dim dbCopy As Database = New Database(srv, Main.dbName)

        Dim xfr As Transfer
        xfr = New Transfer(db)
        xfr.CopyAllTables = False
        xfr.Options.WithDependencies = False
        xfr.Options.ContinueScriptingOnError = True
        xfr.DestinationDatabase = dbCopy.Name
        xfr.DestinationServer = srv.Name
        xfr.DestinationLoginSecure = True
        xfr.CopySchema = True
        xfr.CopyData = True
        xfr.Options.DriAll = False
        xfr.Options.DriDefaults = True
        xfr.Options.DriIndexes = True
        xfr.Options.DriPrimaryKey = True
        xfr.Options.DriUniqueKeys = True
        xfr.Options.DriForeignKeys = False
        xfr.ObjectList.Add("Accounting")
        xfr.TransferData()
    End Sub

【问题讨论】:

    标签: sql sql-server database vb.net smo


    【解决方案1】:

    你应该设置

    xfr.CopyAllTables = False
    xfr.Options.WithDependencies = False
    

    你也应该转移密钥

    xfr.Options.DriAll = False 
    xfr.Options.DriDefaults = True
    xfr.Options.DriIndexes = True
    xfr.Options.DriPrimaryKey = True
    xfr.Options.DriUniqueKeys = True
    xfr.Options.DriForeignKeys = False
    

    然后

    EDIT(我更改了在传输对象列表中添加表格)

    xfr.ObjectList.Add(db.Tables("table_name"))
    xfr.TransferData()
    

    要在数据库之间传输指定的对象,您需要将此对象添加到 ObjectList 而不仅仅是对象的名称。

    【讨论】:

    • 它仍在传输所有表,没有任何记录。之后我也遇到了错误。错误:错误:错误代码=0 描述=不支持传输数据类型“sql_variant”的列。 helpFile= helpContext=0 idofInterfaceWithError={C81DFC5A-3B22-4DA3-BD3B-10BF861A7F9C}
    • 您确定将CopyAllTablesOptions.WithDependencies 设置为False?要消除错误,您需要将数据类型为 sql_variant 的列转换为其他数据类型。
    • 是的,它们都已经是假的了。我该怎么做你在第二句话中所说的?
    • 您需要分析存储在此列中的值,然后在表设计面板中更改列数据类型,例如 SQL Server Managment Studio。我不知道如何在 SMO 传输数据的过程中转换列数据类型。
    • 即使 'CopyAllTables' 和 'Options.WithDependencies' 设置为 False,它仍会传输所有表。使用 SMO 传输单个表没有更简单的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2010-09-19
    相关资源
    最近更新 更多