从SQL Server导出表以导入到Oracle 10g

时间:2009-11-13 11:32:52

标签: sql-server oracle migrate

我正在尝试从SQL Server 2005导出一些表,然后创建这些表并在Oracle中填充它们。

我有大约10个表,从4列到25列不等。我没有使用任何约束/键,所以这应该是相当直接的。

首先,我生成脚本来获取表结构,然后修改它们以符合Oracle语法标准(即将nvarchar更改为varchar2)

接下来,我使用SQL Server导出向导导出数据,该向导创建了一个csv平面文件。但是我的主要问题是我找不到强制SQL Server双引号列名的方法。我的一个列包含逗号,所以除非我能找到一个SQL服务器引用列名的方法,否则在导入时会遇到麻烦。

另外,我是走困难的路线,还是有更简单的方法呢?

由于

编辑:引用我引用引用csv中的列值。例如,我有一个包含

等地址的列
  

101 High Street,Sometown,Some   县,PO5TC053

如果不将其更改为以下内容,则在加载CSV时会出现问题

  

“101 High Street,Sometown,Some   县,PO5TC053“

3 个答案:

答案 0 :(得分:4)

在使用SQLDeveloper查看某些选项或手动尝试导出/导入后,我在SQL Server管理工作室上找到了一个实用程序,它可以获得所需的结果,并且易于使用,请执行以下操作

  1. 转到SQL Server上的源架构
  2. 右键单击>导出数据
  3. 选择来源作为当前架构
  4. 选择目标为“Oracle OLE提供程序”
  5. 选择属性,然后将服务名称添加到第一个框中,然后添加用户名和密码,请务必单击“记住密码”
  6. 输入查询以获取要迁移的结果
  7. 输入表格名称,然后点击“修改”按钮
  8. 更改映射,将nvarchars更改为varchar2,将INTEGER更改为NUMBER
  9. 运行
  10. 对剩余的表重复此过程,如果您将来需要再次执行此操作,则另存为

答案 1 :(得分:1)

Use the SQLDeveloper migration tools

我认为引用oracle中的列名是你不应该使用的。它会导致各种各样的问题。

答案 2 :(得分:1)

正如罗伯特所说,我强烈建议再次引用列名。结果是,您不仅要在导入数据时引用它们,还要在SQL语句中引用该列时引用它们 - 是的,这可能也意味着在您的程序代码中。构建SQL语句变得非常麻烦!

根据您的撰写内容,我不确定您是在引用列名还是这些列中的数据。 (SQLServer真的可以在列 名称 中使用逗号吗?如果有充分理由,我会感到非常惊讶!)引用列内容应该是为了任何类似字符串的列(虽然我发现其他字符通常效果更好,因为需要“转义”引号成为另一个问题)。如果您要导出CSV应该是一个选项..但是我不熟悉导出向导。

移动数据的另一个想法(取决于项目的规模)将是使用ETL / EAI工具。我和Pentaho套件以及他们的Kettle组件一直在玩。它提供了一系列将数据从一个地方移动到另一个地方的选项。对于简单的传输,它可能有点过大,但如果它是相应卷的大“迁移”,那么它可能是一个不错的选择。