代码之家  ›  专栏  ›  技术社区  ›  MrM

如何将数据从旧服务器拉到SQL服务器?

  •  0
  • MrM  · 技术社区  · 15 年前

    我想编写一个代码,将数据从服务器上传输到我的SQL服务器。在放入数据之前,我想删除当前数据。然后把数据从一个放到另一个。我该怎么做?这是迄今为止我所掌握的代码片段。

    string SQL = ConfigurationManager.ConnectionStrings["SQLServer"].ToString();
    string OLD = ConfigurationManager.ConnectionStrings["Server"].ToString();
    
    SqlConnection SQLconn = new SqlConnection(SQL);
    string SQLstatement = "DELETE * FROM Data";
    SqlCommand SQLcomm = new SqlCommand(SQLstatement, SQLconn);
    SQLconn.Open();
    
    OdbcConnection conn = new OdbcConnection(OLD);
    string statement = "SELECT * FROM BILL.TRANSACTIONS ";
    statement += "WHERE (TRANSACTION='NEW') ";            
    OdbcCommand comm = new OdbcCommand(statement, conn);
    comm.CommandTimeout = 0;
    conn.Open();
    
    
    SqlDataReader myDataReader = SQLcomm.ExecuteReader();
    while (myDataReader.Read())
    {
        //...            
    }
    SQLconn.Close();
    SQLconn.Dispose();
    
    5 回复  |  直到 15 年前
        1
  •  6
  •   Tom H    15 年前

    根据您使用的SQL Server的版本,这里的标准解决方案是使用DTS(2000及更早版本)或SSIS(2005及更高版本)。如果需要,可以将其转换为可执行文件,直接从SQL Server调度它,或者手动运行它。这两种工具都相当健壮(尽管ssis更为健壮),具有清除现有数据、出错时回滚、必要时转换数据、写出异常等方法。

        2
  •  2
  •   Miles D    15 年前

    如果可能的话,我会尝试在SQL Server中完成这一切。您可以创建到其他数据库服务器的链接服务器。然后简单地使用T-SQL复制数据-它看起来像…

    INSERT INTO new_server_table (field1, field2)
    SELECT x, y
    FROM mylinkedserver.myolddatabase.myoldtable 
    

    如果需要定期执行此操作,或者首先清除数据,则可以使用SQL代理作为计划任务的一部分执行此操作。

        3
  •  1
  •   Beep beep    15 年前

    如果只需要导入一次数据,并且有大量数据,为什么不使用“大容量插入”命令呢? Link

        4
  •  1
  •   Andrew Hare    15 年前

    T-SQL允许您从 select 查询。它看起来像这样:

    insert into Foo
    select * from Bar;
    

    只要字段类型对齐,这将起作用-否则,您必须从 Bar 以适应 Foo .

        5
  •  0
  •   Erwin    15 年前

    当您需要执行此操作一次时,请查看数据库发布向导(仅限Google)并生成一个脚本,该脚本可以执行所有操作。