1

如何使用 Informatica 将数据加载到名称为 SQL 保留关键字的目标表中?

我有一种情况,我试图使用 Informatica 填充一个名为Union的表,该表失败并出现以下错误:

  • SQL Server 消息:键“联合”附近的语法不正确
  • 数据库驱动错误...
  • 函数名称:执行多个
  • SQL Stmt:INSERT INTO UNION(UnionCode、UnionName 等)

有人告诉我,将数据库属性更改为使用带引号的标识符可以解决这个问题;但是,我已经尝试过了,它似乎只适用于来源,而不适用于目标。

在任何人陈述明显之前 - 我无法更改目标表的名称。

4

3 回答 3

0

如果任何表名或列名包含数据库保留字,例如 MONTH 或 YEAR,则当集成服务对数据库执行 SQL 时,会话将失败并出现数据库错误。您可以在 server/bin 目录中创建和维护保留字文件 reswords.txt。当集成服务初始化会话时,它会搜索 reswords.txt。如果文件存在,集成服务在对数据库执行 SQL 时会在匹配的保留字周围加上引号。

使用保留字时,请遵循以下规则和准则。

集成服务在生成 SQL 以连接到源、目标和查找数据库时搜索保留字文件。

如果您覆盖源、目标或查找的 SQL,则必须将任何保留字括在引号中。

您可能需要启用某些数据库,例如 Microsoft SQL Server 和 Sybase,以使用有关引用标识符的 SQL-92 标准。使用连接环境 SQL 发出命令。例如,对 Microsoft SQL Server 使用以下命令:

SET QUOTED_IDENTIFIER ON 

示例 reswords.txt 文件 要使用保留字文件,请创建一个名为 reswords.txt 的文件并将其放在 server/bin 目录中。为您需要为其存储保留字的每个数据库创建一个部分。添加在任何表或列名称中使用的保留字。您不需要在此文件中存储数据库的所有保留字。reswords.txt 中的数据库名称和保留字不区分大小写。

以下是示例 reswords.txt 文件:

[Teradata] MONTH DATE INTERVAL [Oracle] OPTION START [DB2] [SQL Server] CURRENT [Informix] [ODBC] MONTH [Sybase]

于 2015-02-23T07:09:00.440 回答
0

您能否尝试用引号将会话属性中的表名覆盖为“Union”。

于 2013-10-25T09:44:04.047 回答
0

将数据加载到具有有效名称的表中,与 union 具有相同的结构。在该目标的 Post Sql 中,您可以使用所需的任何名称重命名表。

前任 。单击目标(​​XUnion),转到 Post Sql 并在下面放置语句 -

RENAME XUnion to 'UNION' ; 
于 2014-10-19T09:47:20.733 回答