我现在需要做的事把Oracle中的数据导入到sql server中,但是不知道怎么写将从Oracle中得到的数据插入到sql数据库中的sql语句,因为我要导入多个表的数据,每个表的字段和字段类型都不一样,我想动态的生成这条插入语句,不知道怎么实现........请高手指点怎么生成这条语句????或者还有更好的办法不用生成这条insert语句就可以直接导入????????????

解决方案 »

  1.   

    可以使用pl/sql developer的导出功能来生成insert脚本,不过可能有些要稍做修改。
      

  2.   

     colCount =0;                  
     while (odrInsert.Read())//odrInsert要导入sql的数据集
     {
        insertStr = "insert into " + tableStr + " values(";//插入语句
        subInsertStr = "";
        while (odr.Read())//odr是存有表的字段类型的数据集
        {
          typeStr = subGetType(odr.GetValue(1).ToString().Trim()); //subGetType是我自己写的一个函数得 到sql中对应的数据类型,
          if (typeStr == "CHAR" || typeStr == "NCHAR" || typeStr == "VARCHAR" || typeStr == "NVARCHAR" || typeStr == "DATETIME" || typeStr == "CHAR(18)" || typeStr == "IMAGE" || typeStr == "VARBINARY(MAX)")//读数据类型进行判断是否需要加单引号我只找到这些数据类型 呵呵,对于别的还没想。。
        {
     subInsertStr = subInsertStr + "'" + odrInsert.GetValue(colCount) + "'" + ",";//加单引号    }
         else
        {     subInsertStr = subInsertStr + odrInsert.GetValue(colCount) + ",";//不加单引号
         }
         colCount++;
         }
         insertStr = insertStr + subInsertStr;
         insertStr = insertStr.Substring(0, insertStr.Length - 1).ToString().Trim();
         insertStr = insertStr + ")";
         SqlCommand sqlCmd = new SqlCommand(insertStr, sqlMyConn);
         sqlCmd.ExecuteNonQuery();
         }
    这个代码过不去 错误是因为第二次循环的时候odr.read()就不执行了。。请高手改改。
      

  3.   

    C#的程序?
    好像你是读出oracle的数据,再塞到sqlserver里面吧?
    先建好sqlserver的表结构(老师不会要求这个也是动态的吧),
    然后读oracle数据写到文件,写完再批量的塞进sqlserver
    一条条塞的方法不好,中间出错了不好回滚.
      

  4.   

    恩 我把基本的实现了 就是一条条弄的。。不过感觉很牵强。还有好的方法?????? sqlserver的表结构也有
      

  5.   

    既然是老师的要求,能实现就行^_^
    其实sqlserver貌似,好像能建立到oracle的链接服务器的,没试过,如果行的话,就能直接拉取数据的应该...sqlldr在操作系统级调用很爽,呼的一下就能把文件里面的暴多数据塞进oracle的表了
    sqlserver的bcp没用过,但肯定也行的
    你可以程序把oracle数据全部读出来写到文件,再调bcp一下子塞进sqlserver看看..
      

  6.   

    用DTS等专用工具导入最合适。