如何基于Microsoft.SqlServer.Management.Smo.Transfer中的架构名称复制表

赫曼·马尔波特

我正在从Source_Test数据库Destination_Test数据库复制表。

使用Microsoft.SqlServer.Management.Smo.Transfer

复制所有表格 from Source_Test to Destination_Test

但是我想要具有模式“ TestSchema”的表。

主要问题是,它复制了具有的所有表dbo schema即使我设置this.CopyAllTables = false;它仍然复制它。如何限制它。我试过以下:

public class CopyTable : Transfer, ISchemaCopy
{
   private void CopyTables()
   {
      this.CopyAllTables = false;
      var server = new Server(new ServerConnection(connection));
      var script = this.ScriptTransfer().Cast<string>();
   }
}
德怀特

我认为以下代码可以实现您想要实现的目标。如果通过提供SchemaName设置仅从一个模式复制表,它将仅添加该模式的表进行复制。

关键是建立要复制的表的集合,并将该集合显式添加到ObjectList。不要忘记将ServerName和DatabaseName更改为真实的名称。

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

/* Needs references to:
 * 
 * System.Data
 * Microsoft.SqlServer.ConnectionInfo 
 * Microsoft.SqlServer.Management.Sdk.Sfc
 * Microsoft.SqlServer.Smo
 * Microsoft.SqlServer.SmoExtended
 */

namespace CopyTablesExample
{
    class Program
    {
        public class CopyTables : Transfer
        {
            public string SchemaName { get; set; }
            public string DatabaseName { get; set; }
            public string ServerName { get; set; }


            public IEnumerable<string> GetScript()
            {
                //This is what we will return
                IEnumerable<string> scriptStrings = null;

                if (this.DatabaseName == null) {
                    throw new Exception("DatabaseName property not set.");
                }

                if (this.ServerName == null) {
                    throw new Exception("ServerName property not set.");
                }

                var server = new Server(new ServerConnection(ServerName));
                this.Database = server.Databases[this.DatabaseName];

                //Turn off all objects.  Below we will start turning on what we want.
                //You may wish to add more object types.
                this.CopyAllObjects = false;

                if (this.SchemaName == null) {
                    //No schema means all tables
                    this.CopyAllTables = true;
                }
                else {
                    //A specific schema means all tables from that schema
                    this.CopyAllTables = false;
                    //We only want to copy tables in a specific schema.
                    List<Table> tablesToCopy = new List<Table>();
                    foreach (Table t in this.Database.Tables) {
                        if (t.Schema.Equals(this.SchemaName)) {
                            tablesToCopy.Add(t);
                        }
                    }

                    //Add specifically the tables we want which are from the schema we want
                    this.ObjectList.AddRange(tablesToCopy);
                }

                try {
                    scriptStrings = this.ScriptTransfer().Cast<string>();
                }
                catch (Exception ex) {
                    Console.WriteLine("We got an exception.");
                    throw;
                }
                return scriptStrings;
            }
        }

        static void Main(String[] Args)
        {
            //Only set a SchemaName in line below, when you want to restrict yourself to copying that schema's tables.
            CopyTables ct = new CopyTables() { ServerName = "xyz", DatabaseName = "abc", SchemaName = "junk" } ; 
            var copyTablesScript = ct.GetScript();

            //For validation, display the script as generated
            foreach (var item in copyTablesScript) {
                Console.WriteLine(item);
            }
            var discard = Console.ReadKey();
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Microsoft.SqlServer.Management.Smo获取SQL Server的恢复模型

来自分类Dev

找不到Microsoft.SqlServer.Management.Smo.Restore错误

来自分类Dev

Microsoft.SqlServer.Management.Smo参考中未显示备份类

来自分类Dev

类型或名称空间名称'Smo'在名称空间'Microsoft.SqlServer'中不存在(您是否缺少程序集引用?)

来自分类Dev

使用Microsoft.SqlServer.Smo更改列标识

来自分类Dev

无法在Microsoft.SqlServer.Management.RegisteredServers中创建RegisteredServer

来自分类Dev

如何使用Microsoft.SqlServer.Management.SqlParser中的类将T-SQL解析为AST

来自分类Dev

如何使用Powershell sqlserver smo程序集输出受影响的行的输出

来自分类Dev

如何使用SMO将数据库转移到新架构?

来自分类Dev

如何在C#SMO中获取ExecuteWithResults返回的数据集中的列的MaxLength?

来自分类Dev

如何使用SMO遍历C#中的数据库对象

来自分类Dev

错误:无法加载文件或程序集“ Microsoft.SqlServer.Management.Sdk.Sfc,版本= 11.0.0.0”

来自分类Dev

错误SQL中的Microsoft.SqlServer.ConnectionInfo

来自分类Dev

使用Sql Server Management Studio 2016导入bacpac时出错-无法加载文件或程序集Microsoft.SqlServer.Dac

来自分类Dev

无法加载文件或程序集microsoft.sqlserver.management.sdk.sfc版本= 11.0.0.0文化=中性publickeytoken

来自分类Dev

如何解决“com.microsoft.sqlserver.jdbc.SQLServerException:无效的列名称taxi_id'”

来自分类Dev

如何在sqlserver中获取序列名称列表?

来自分类Dev

如何使用SMO从“创建脚本”创建“表更改”脚本

来自分类Dev

类型或名称空间名称“ SqlServer”在名称空间“ Microsoft.EntityFrameworkCore”中不存在

来自分类Dev

在PowerShell中通过SMO执行SQL脚本时出错

来自分类Dev

在SQL 2016 SMO中模拟用户帐户失败

来自分类Dev

使用 SMO 遍历 SQL Server 中的所有数据

来自分类Dev

SMO 使用 PowerShell 生成数据库脚本,因此与从 Management Studio 手动创建脚本时的方式相同

来自分类Dev

更改sessionState SQLServer架构

来自分类Dev

如何使用VB.NET的SMO类将单个表传输到MSSQL服务器中的另一个数据库?

来自分类Dev

无法加载文件或程序集“ Microsoft.SqlServer.Management.RegisteredServers,版本= 15.2.0.0,区域性=中性,PublicKeyToken = 89845dcd8080cc91”

来自分类Dev

如何修复 CONSTRAINTS 阻止我复制表架构?

来自分类Dev

如何在Microsoft SQL Server Management Studio中更改当前选项卡的连接

来自分类Dev

如何在我的计算机上查找在Microsoft Management Studio中创建的数据库?

Related 相关文章

  1. 1

    Microsoft.SqlServer.Management.Smo获取SQL Server的恢复模型

  2. 2

    找不到Microsoft.SqlServer.Management.Smo.Restore错误

  3. 3

    Microsoft.SqlServer.Management.Smo参考中未显示备份类

  4. 4

    类型或名称空间名称'Smo'在名称空间'Microsoft.SqlServer'中不存在(您是否缺少程序集引用?)

  5. 5

    使用Microsoft.SqlServer.Smo更改列标识

  6. 6

    无法在Microsoft.SqlServer.Management.RegisteredServers中创建RegisteredServer

  7. 7

    如何使用Microsoft.SqlServer.Management.SqlParser中的类将T-SQL解析为AST

  8. 8

    如何使用Powershell sqlserver smo程序集输出受影响的行的输出

  9. 9

    如何使用SMO将数据库转移到新架构?

  10. 10

    如何在C#SMO中获取ExecuteWithResults返回的数据集中的列的MaxLength?

  11. 11

    如何使用SMO遍历C#中的数据库对象

  12. 12

    错误:无法加载文件或程序集“ Microsoft.SqlServer.Management.Sdk.Sfc,版本= 11.0.0.0”

  13. 13

    错误SQL中的Microsoft.SqlServer.ConnectionInfo

  14. 14

    使用Sql Server Management Studio 2016导入bacpac时出错-无法加载文件或程序集Microsoft.SqlServer.Dac

  15. 15

    无法加载文件或程序集microsoft.sqlserver.management.sdk.sfc版本= 11.0.0.0文化=中性publickeytoken

  16. 16

    如何解决“com.microsoft.sqlserver.jdbc.SQLServerException:无效的列名称taxi_id'”

  17. 17

    如何在sqlserver中获取序列名称列表?

  18. 18

    如何使用SMO从“创建脚本”创建“表更改”脚本

  19. 19

    类型或名称空间名称“ SqlServer”在名称空间“ Microsoft.EntityFrameworkCore”中不存在

  20. 20

    在PowerShell中通过SMO执行SQL脚本时出错

  21. 21

    在SQL 2016 SMO中模拟用户帐户失败

  22. 22

    使用 SMO 遍历 SQL Server 中的所有数据

  23. 23

    SMO 使用 PowerShell 生成数据库脚本,因此与从 Management Studio 手动创建脚本时的方式相同

  24. 24

    更改sessionState SQLServer架构

  25. 25

    如何使用VB.NET的SMO类将单个表传输到MSSQL服务器中的另一个数据库?

  26. 26

    无法加载文件或程序集“ Microsoft.SqlServer.Management.RegisteredServers,版本= 15.2.0.0,区域性=中性,PublicKeyToken = 89845dcd8080cc91”

  27. 27

    如何修复 CONSTRAINTS 阻止我复制表架构?

  28. 28

    如何在Microsoft SQL Server Management Studio中更改当前选项卡的连接

  29. 29

    如何在我的计算机上查找在Microsoft Management Studio中创建的数据库?

热门标签

归档