5

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

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

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

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

另外,我是走困难的路线,还是有更简单的方法来做到这一点?

谢谢

编辑:通过引用我指的是引用 csv 中的列值。例如,我有一个包含地址的列

101 High Street, Sometown, Some County, PO5TC053

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

"101 High Street, Sometown, Some County, PO5TC053"

4

3 回答 3

5

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

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

使用 SQLDeveloper 迁移工具

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

于 2009-11-13T11:37:49.917 回答
1

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

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

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

于 2009-11-13T14:08:13.433 回答